Beruflich Dokumente
Kultur Dokumente
Unidad 5 - Objetivos
Entender el propsito e importancia del Lenguaje de Consulta Estructurado SQL. Como recuperar datos de una base de datos usando la instruccin SELECT
Uso de condicin WHERE compuesta. Ordenando resultados usando ORDER BY.
Unidad 5 - Objetivos
Uso de funciones agregadas. Agrupando datos usando GROUP BY y HAVING. Uso de Subconsultas(subqueries.) Uniendo Tablas (Join tables together.) Realizando operaciones de conjunto (UNION, INTERSECT, EXCEPT).
Unidad 5 - Objetivos
Objetivos de SQL
Idealmente un lenguaje de base de datos debera permitir a un usuario:
Crear la base de datos y las estructuras de relaciones Realizar tareas de administracin de datos bsicas, Realizar consultas simples y complejas Debe realizar estas tareas con mnimo esfuerzo del usuario Su estructura de comandos y sintaxis debe ser fcil de aprender Debe ser portable
Objetivos de SQL
SQL es un lenguaje orientado a transformacin con dos principales componentes:
Un DDL para definir la estructura de la base de datos y controlar el acceso a los datos; Un DML para recuperar y actualizar datos
Hasta 1999 SQL no contena comando para control de flujo, tales como IFTHENELSE, GO TO, o DO WHILE. Estos tenan que ser implementados usando lenguajes de programacin o Job Control Lenguaje, o interactivamente por las decisiones del usuario.
Objetivos de SQL
Objetivos de SQL
2) INSERT INTO Empleado VALUES (SG16, Brown, 8300); 3) SELECT numEmpleado, nombre, salario FROM Empleado WHERE salario > 10000;
Objetivos de SQL
Puede ser usado por un rango de usuarios DBAs, administradores, desarrolladores de aplicaciones, y otros tipos de usuarios finales. Existe un estndar ISO para SQL, hacindolo el lenguaje estndar formal y de hecho para bases de datos relacionales
Historia de SQL
En 1974, D. Chamberlin (IBM San Jose Laboratory) defini un lenguaje llamado Structured English Query Language (SEQUEL). Una versin revisada, SEQUEL/2, fue definida en 1976 pero el nombre fue posteriormente cambiado a SQL por razones legales.
Historia de SQL
Aun pronunciado see-quel, a pesar que la pronunciacin oficial es S-Q-L. IBM posteriormente produjo un Prototipo de DBMS llamado System R, basado en SEQUEL/2. Las races de SQL, estn en SQUARE (Specifying Queries as Relational Expressions), el cual es anterior al proyecto System R.
Historia de SQL
Al final de los 70, apareca ORACLE y fue probablemente el primer RDBMS basado en SQL En 1987, ANSI e ISO publicaron un estndar inicial para SQL. En 1989, ISO public un anexo que defini las caractersticas de mejoras de integridad. En 1992, ocurri la primera revisin principal del estndar ISO, referido como SQL2 o SQL/92. En 1999, SQL:1999 fue liberado con soporte para administracin de datos orientado a objeto. Al final de 2003, fue liberado SQL:2003.
Importancia de SQL
SQL pasa a formar parte de la arquitectura de aplicaciones tales como IBMs Systems Application Architecture. Es una opcin estratgica de muchas organizaciones grandes e influyentes (Ej: X/OPEN). SQL es el estndar federal para el tratamiento de la informacin (FIPS) del cual se requiere la conformidad para todas las ventas de bases de datos al gobierno americano.
Importancia de SQL
El SQL se utiliza en otros estndares e incluso influencia el desarrollo de otros estndares como herramienta definicional. Los ejemplos incluyen:
ISOs Information Resource Directory System (IRDS) Standard Remote Data Access (RDA) Standard.
Literales
Los literales son constantes usadas en sentencias SQL. Todos los literales no numricos deben estar encerrados en cremilla simple (ej. London).
Todos los literales numricos no deben estar encerrados en cremillas (ej. 650.00).
Instruccin SELECT
SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM NombreTabla [alias] [, ...] [WHERE condicin] [GROUP BY listaColumna] [HAVING condicin] [ORDER BY listaColumna]
Instruccin SELECT
FROM Especifica la o las tabla(s) a ser usadas WHERE Filtra filas. GROUP BY Forma grupos de filas con el mismo valor de columna. HAVING Filtra grupos sujeto a la misma condicin. SELECT Especifica que columnas van a aparecer en la salida ORDER BY Especifica el orden de la salida.
Instruccin SELECT
SELECT numEmpleado, nombre, apellido, salario FROM empleado WHERE salario > 100000;
de
Tambin hay una versin negada NOT IN. IN no agrega mucho poder expresivo a SQL. Tambin podramos escribir:
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado WHERE cargo = Gerente OR cargo = Supervisor);
numCliente nombre apellido direccion CR74 Mike Ritchie 63 Well St, Glasgow, G42 CR62 Mary Tregear 12 Park PI, Glasgow, G4 0QR
numCliente numPropiedad Q56 IA14 Q76 Q56 Q62 Q56 IG4 IG4 IA14 IG36
Fecha Comentario 24-11-1999 muy pequeo 20-10-1999 muy lejos 26-11-1999 14-11-1999 no tiene saln 28-10-1999
La versin negada (IS NOT NULL) puede verificar por valores no-null.
Listar los sueldos para todo el personal, dispuestos en orden descendente del sueldo.
SELECT numEmpleado, nombre, apellido, salario FROM Empleado ORDER BY salario DESC;
La tabla Propiedad
codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX
tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093
por
Descripcin
Calcula el promedio de los valores de un campo determinado Devuelve el nmero de registros de la seleccionados Devuelve la suma de todos los valores de un campo determinado Devuelve el valor ms alto de un campo especificado Devuelve el valor ms bajo de un campo especificado
DISTINCT no tiene efecto con MIN/MAX, pero puede tener con SUM/AVG.
myCount 2
myCount
mySum 2 540000
Ejemplo 5.16 Uso de MIN, MAX y AVG Determinar el sueldo mnimo, mximo y el promedio de los empleados. SELECT MIN(salary) AS myMin, MAX(salary) AS myMax, AVG(salary) AS myAvg FROM Staff;
myMin myMax myProm 90000 300000 170000
Los nombres de la columna en la clusula HAVING deben tambin aparecer en la lista GROUP BY o estar contenido dentro de una funcin agregada.
Para cada oficina con ms de 1 empleado, encuentre el nmero de empleados en cada oficina y la suma de sus sueldos.
GROUP BY branchNo
HAVING COUNT(staffNo) > 1 ORDER BY branchNo;
Subconsultas
Algunas instrucciones SQL pueden tener un SELECT incrustado dentro de l. Un subselect puede ser usado en una clusula WHERE y HAVING de un SELECT externo, donde se llama una subquery o consulta anidada. Los Subselects pueden tambin aparecer en las instrucciones INSERT, UPDATE, y DELETE.
Tabla Empleado
cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005
Listar los empleados que trabajan en la oficina ubicada en 163 Main Street
Tabla Empleado
apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005
Listar los empleados que trabajan en la oficina ubicada en 163 Main Street
numEmpleado SG37 SG14 SG5 nombre Peter David Susan apellido Denver Ford Sarandon cargo Asistente Supervisor Gerente
Listar a todos los empleados cuyo sueldo sea mayor que el sueldo promedio, e indique por cunto.
Reglas de Subconsulta
La clusula ORDER BY no se puede utilizar en una subconsulta (aunque puede ser utilizada en un SELECT exterior).
La lista SELECT de una subconsulta debe consistir en un solo nombre o expresin de columna, a excepcin de las subconsultas que usan EXIST Por defecto, los nombres de la columna refieren a nombre de la tabla adentro de la clusula del subquery. Puede referir a una tabla en el FROM usando un alias.
Subquery Rules
Cuando una subconsulta es uno de los dos operandos en una comparacin, la subconsulta debe aparecer al lado derecho de la comparacin . Un subconsulta no se puede utilizar como operando en una expresin.
Tabla Empleado
apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005
Listar las propiedades que son manejadas por los empleados que trabajan en la sucursal de la calle 163 Main Street.
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow
Tabla Propiedad
codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21
(SELECT numEmpleado FROM Empleado WHERE numOficina = (SELECT numOficina FROM Oficina WHERE calle = 163 Main St));
numPropiedad PG21
calle 10 Dale Rd
ciudad Glasgow
ANY y ALL
ANY y ALL pueden ser usadas con subconsultas que producen una sola columna de nmeros Si usa ALL, la condicin ser verdadera si es satisfecha por todos los valores producidos en la subconsulta Si usa ANY, la condicin ser verdadera si es satisfecha por uno o ms valores producidos por la subconsulta . Si la subconsulta es vacia, ALL retorna verdadero y ANY retorna falso SOME mude ser usado en lugar de ANY.
Listar todos los empleados cuyo salario es mayor que el salario de al menos un empleado de la sucursal B003.
Listar todos los empleados cuyo salario es mayor que el salario de todos los empleados de la sucursal B003.
Consultas multi-tablas
Puede utilizar subqueries que proporcione columnas de resultado que vienen de la misma tabla.
Consultas multi-tablas
Tambin es posible utilizar un alias para una tabla nombrada en la clusula FROM. El Alias es separado del nombre de la tabla con un espacio. El alias se puede utilizar para calificar nombres de la columna cuando hay ambigedad.
Tabla Visita
numCliente numPropiedad CR56 PA14 CR76 CR56 CR62 CR56 PG4 PG4 PA14 PG36 Fecha Comentario 24-11-1999 muy pequeo 20-10-1999 muy lejos 26-11-1999 14-11-1999 no tiene saln 28-10-1999
Listar los nombres de todos los clientes que han visitado una propiedad y los comentarios efectuados al visitarla.
SELECT c.numCliente, nombre, apellido, numPropiedad, comentario FROM Cliente c, Visita v WHERE c. numCliente = v. numCliente;
En cada caso, FROM reemplaza el FROM y WHERE original. Sin embargo, el primero produce una tabla con dos columnas idnticas de numCliente.
Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21
Para cada oficina, listar los nmeros y nombres de los empleados que administran propiedades y las propiedades que ellos administran.
SELECT e.numOficina, e.numEmpleado, nombre, apellido, numPropiedad FROM Empleado e, Propiedad p WHERE e.numEmpleado = p.numEmpleado ORDER BY e.numOficina, e.numEmpleado, numPropiedad;
Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab renta numPropietario Casa 6 650 C046 Departamento 4 400 C087 Departamento 3 350 C040 Departamento 3 375 C093 Casa 5 600 C087 Departamento 4 450 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL21
Tabla Oficina
Para cada oficina, Listar los nmeros y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina est ubicada y las propiedades que ellos administran.
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
Para cada oficina, Listar los nmeros y nombres de los empleados que administran propiedades, incluyendo la ciudad en la cual la oficina est ubicada y las propiedades que ellos administran.
Tabla Propiedad
numPropiedad PA14 PL94 PG4 PG36 PG21 PG16 calle 16 Holhead 6 Argvill St. 6 Lawrence St 2 Manor Rd 10 Dale Rd 5 Novar Dr ciudad Aberdeem London Glasgow Glasgow Glasgow Glasgow codigoPostal AB7 5SU NW2 G11 9QX G114QX G12 G12 9AX tipo hab Casa Departamento Departamento Departamento Casa Departamento 6 4 3 3 5 4 renta 650 400 350 375 600 450 numPropietario C046 C087 C040 C093 C087 C093 numEmpleado SL21 SL21 SA9 SA9 SG5 SL41
Calculando un Join
El procedimiento para generar resultados de un join es:
1. Forme el producto cartesiano de las tablas nombradas en la clusula FROM. 2. Si hay una clusula WHERE, aplique la condicin de bsqueda a cada fila de la tabla del producto, conservando esas filas que satisfagan la condicin
3. Para cada fila restante, determine el valor de cada item en lista SELECT para producir una sola fila en la tabla resultado.
Calculando un Join
4. Si se ha especificado DISTINCT, eliminar cualquier
fila duplicada de la tabla resultado. 5. Si hay una clusula ORDER BY, se requiere ordenar la tabla resultado.
Outer Joins
Si una fila de una de las tablas a unir no coincide, la fila es omitida de la tabla resultante. El outer join retiene las filas que no satisfacen la condicin. Considere las siguientes tablas:
Tabla Oficina1 Tabla Propiedad1
Outer Joins
El (inner) join de estas dos tablas:
numOficina ciudad numPropiedad ciudad B003 Glasgow PG4 Glasgow B002 London PL94 London
Outer Joins
Tabla resultado del inner join tabla Oficina1 con tabla Propiedad1
La tabla resultado tiene dos filas donde son iguales las ciudades.
No hay filas que corresponden a las oficinas en Bristol y Aberdeen. Para incluir filas incomparables en la tabla resultado, utilice un join externo (Outer Join).
Liste las oficinas y las Propiedades que estn en la misma ciudad junto con cualquier oficina incomparable.
SELECT o.*, p.* FROM Oficina1 o LEFT JOIN Propiedad1 p ON o.ciudad = p.ciudad;
Liste los sucursales y las propiedades en la misma ciudad y cualquier propiedad incomparable (ciudad unmatched). SELECT o.*, p.* FROM Oficina1 b RIGHT JOIN Propiedad1 p ON b.ciudad = p.ciudad;
no
Verdadero si y solo si existe por lo menos una fila en la tabla resultado retornada por la subquery. Falso si la subconsulta retorna una tabla vaca.
NOT EXISTS es el opuesto de EXISTS.
(SELECT * ...)
Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle 16 Holhead 6 Argvill St. 163 Main Street 2 Manor Rd 10 Dale Rd ciudad Aberdeem London Glasgow Glasgow Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
SELECT numEmpleado, nombre, apellido, cargo FROM Empleado e WHERE EXISTS (SELECT * FROM Oficina o WHERE e.numEmpleado = o.numEmpleado AND ciudad = London);
numEmpleado SA9
cargo Asistente
Si se omite, listara todos los registros de empleado, debido a que la siguiente subconsulta:
SELECT * FROM Oficina WHERE ciudad=London
Si CORRESPONDING BY es especificado, entonces la operacin de conjunto es realizada sobre la o las columnas nombradas Si CORRESPONDING es especificado sin el BY, la operacin de conjunto se aplica sobre las columnas comunes en ambas tablas .
Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle ciudad 16 Holhead Aberdeem 6 Argvill St. London 6 Lawrence StGlasgow 2 Manor Rd Glasgow 10 Dale Rd Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
Construya un listado de todas las ciudades en donde hay ya sea una oficina o una propiedad.
(SELECT ciudad
FROM Oficina WHERE ciudad IS NOT NULL) UNION (SELECT ciudad FROM Propiedad WHERE ciudad IS NOT NULL);
Tabla Oficina
numOficina B005 B007 B003 B004 B002 calle ciudad 16 Holhead Aberdeem 6 Argvill St. London 6 Lawrence StGlasgow 2 Manor Rd Glasgow 10 Dale Rd Bristol codigoPostal AB7 5SU NW2 G11 9QX G114QX G12
Construya un listado de todas las ciudades en que hay una oficina y una propiedad.
O:
SELECT DISTINCT ciudad FROM Oficina o WHERE EXISTS (SELECT * FROM Propiedad p WHERE p.ciudad = o.ciudad);
O
(SELECT * FROM Oficina) EXCEPT CORRESPONDING BY ciudad (SELECT * FROM Propiedad);
O
SELECT DISTINCT ciudad FROM Oficina o WHERE NOT EXISTS (SELECT * FROM Propiedad p WHERE p. ciudad = b. ciudad );
Tres comandos SQL para modificar el contenido de las tablas en la base de datos:
Insert Agrega nuevas filas de datos a una tabla Delete Elimina filas de datos de una tabla Update Modifica los datos existentes en una tabla.
INSERT
INSERT INTO Nombretabla [ (listaDeColumnas) ]
VALUES (listaDeValores)
listaDeColumnas es opcional; si se omite, SQL asume la lista de todas las columnas en el orden original. todas las columnas omitidas en la lista deben haber sido declaradas NULL cuando la tabla fue creada, a menos que se haya utilizado la opcin DEFAULT cuando se creo la columna.
INSERT
La listaDeValores debe coincidir con listaDeColumnas como sigue: El nmero de tems de cada lista debe ser el mismo Debe haber una correspondencia directa en la posicin de los tems en las dos listas, El tipo de datos de cada item en listaDeValores debe ser compatible con el tipo de datos de la correspondiente columna.
Insertar una nueva fila en la tabla Empleado, entregando los datos para todas las columnas:
INSERT INTO Empleado VALUES (SG16, Alan, Brown, Asistente, M, Date1957-05-25, 83000, B003);
INSERT INTO Empleado (numEmpleado, nombre, apellido, cargo, salario, numOficina) VALUES (SG44, Amme, Jones, Asistente, 8100, B003);
O
INSERT INTO Empleado VALUES (SG44, Anne, Jones, Asistente, NULL, NULL, 8100, B003);
INSERT SELECT
La segunda forma de la instruccin INSERT permite que mltiples filas sean copiadas de una o ms tablas a otra, y tiene el siguiente formato: INSERT INTO NombreTabla [ (listaDeColumnas) ]
SELECT ...
Tabla Empleado
numEmpleado SL21 SG37 SG14 SA9 SG5 SL41 nombre Jhon Peter David Mary Susan Julie apellido White Denver Ford Lee Sarandon Roberts cargo Gerente Asistente Supervisor Asistente Gerente Asistente sexo fechNac M 01-Oct-45 M 10-Nov-60 M 09-Sep-58 F 17-Sep-59 F 21-Mar-60 F 13-Jun-63 salario 300000 120000 180000 90000 240000 90000 numOficina B005 B003 B003 B007 B003 B005
Poblar la tabla EmpleadoTotalPropiedad usando los EmpleadoTotalPropiedad (numEmpleado, Nombre, Apellido, totalProp)
Si la segunda parte de la UNIN se omite, excluye a los empleados que no manejan actualmente ninguna propiedad.
UPDATE
UPDATE NombreTabla SET columnName1 = dataValue1 [, columnName2 = dataValue2...] [WHERE searchCondition]
NombreTabla puede ser el nombre de una tabla base o una vista actualizable. La clusula SET especifica los nombres de una o ms columnas a ser actualizadas
UPDATE
El(los) nuevo(s) dataValue(s) debe(n) ser compatible con el tipo de datos para la columna correspondiente.
D a todos los Empleados un aumento de sueldo del 3%. D a todos los Gerentes un aumento de sueldo del 5%.
UPDATE Empleado
SET cargo = Gerente, salario = 190000 WHERE numEmpleado = SG14;
DELETE
DELETE FROM NombreTabla [WHERE searchCondition]
NombreTabla puede ser una tabla base o una vista actualizable. searchCondition es opcional; si se omite, todas las filas son eliminadas de la tabla. Este no elimina la tabla. Si se especifica search_condition solamente se eliminan aquellas filar que satisfacen la condicin
Fin de la Unidad
X/Open Company
X/Open Company, Ltd. era un consorcio fundado en 1984 para identificar y promover estndares abiertos en el campo de la tecnologa de informacin. X/Open tambin manej la marca registrada de UNIX a partir de 1993 a 1996, cuando X/Open se combin con la fundacin abierta del software Open Software Foundation (OSF) para formar The Open Group
Fin de la Unidad