BASES DE DATOS I CONSULTA DE DATOS curso 2008 Lenguaje SQL (Structured Query Language) • Es el lenguaje standard para manejo de datos en bases de datos relacionales y el que utilizan la mayoría de los DBMS comerciales (DB2, Oracle, INGRES, SYBASE, SQL Server, etc.) • SQL se propuso inicialmente en 1970 y periódicamente se publican versiones actualizadas de la norma. • Las expresiones en las implementaciones de SQL propias de cada DBMS pueden diferir levemente respecto del standard. • Las sentencias DML del SQL se pueden usar interactivamente como un lenguaje de consulta o se pueden insertar en programas de aplicación. • En una consulta se especifica qué información se requiere, sin especificar cómo obtenerla (no requiere métodos de acceso a los datos). Bases de Datos I 2 1 Sentencia SELECT SELECT [ DISTINCT ] <lista atributos> FROM <lista tablas> [ WHERE condición ] [ GROUP BY <lista atributos grupo> [ HAVING (condición grupo) ] ] [ ORDER BY <lista atributos orden> ] ; • El resultado es una tabla (si el resultado es un número, se considera como una tabla con una fila y una columna) • DISTINCT permite eliminar duplicados • La condición del WHERE restringir el conjunto de tuplas a recuperar • GROUP BY `factorea´ la relación resultante en grupos, y se puede aplicar un filtro sobre el grupo mediante HAVING (<lista ítems> debe coincidir con <lista atributos grupo>, aunque puede incluir funciones de agregado) • ORDER BY permite ordenar el resultado mediante una lista de campos en <lista atributos orden> Bases de Datos I 3 Ejemplo N INVESTIGADOR id_inv nom_inv categ N N PROYECTO trabaja proy_id nombre tema 1 corresponde duracion Bases de Datos I id_inst INSTITUTO nombre facultad 4 2 Consultas de una tabla Ej. 1: 1: Listar los identificadores y nombres de los proyectos SELECT proy_id, nombre FROM PROYECTO ; Ej. 2: Listar todos los datos de los Institutos SELECT * FROM INSTITUTO; Bases de Datos I 5 Consultas de una tabla - distinct Ej. 3.a: Listar los temas de los proyectos SELECT tema FROM PROYECTO ; Ej. 3.b: Listar los distintos temas de los proyectos SELECT DISTINCT tema FROM PROYECTO ; Hay repeticiones no se eliminan filas repetidas, a menos que se indique explícitamente con DISTINCT Bases de Datos I 6 3 Consultas de una tabla - condiciones Ej. 4: Listar los nombres de los proyectos de más de 12 meses de duración SELECT nombre FROM PROYECTO WHERE duracion > 12; Ej. 5: Listar los nombres de los proyectos de más de 12 meses de duración cuyo tema comience con ´Bases´ SELECT nombre FROM PROYECTO WHERE duracion >= 12 AND tema LIKE ´Bases%´ ; Bases de Datos I 7 Consultas – funciones de agregado Permiten resumir el resultado de una consulta: • • • • • SUM( ) Æ total de la columna especificada AVG( ) Æ promedio de la columna especificada MAX( ) Æ valor máximo de la columna especificada MIN ( ) Æ valor mínimo de la columna especificada COUNT ( ) Æ cantidad de tuplas Ej. 6: Indicar la cantidad de proyectos sobre el tema Base de Datos SELECT COUNT (*) AS CantProy FROM PROYECTO WHERE tema = ´Bases de Datos´; Se aplican a columnas de tipo numérico Ej. 7: Indicar duración mínima y máxima de los proyectos del instituto 2 SELECT MIN (duracion) AS dmin, MAX (duracion) AS dmax FROM PROYECTO WHERE id_inst = 2; Bases de Datos I 8 4 Consultas – ordenamiento Ej. 8: Listar id. y nombre de los proyectos de 2 años de duración, ordenados por nombre SELECT proy_id, nombre FROM PROYECTO WHERE duracion = 24 ORDER BY nombre; Ej. 9: Listar los datos completos de los proyectos, ordenados por instituto y duración SELECT * FROM PROYECTO ORDER BY id_inst, duracion; Bases de Datos I 9 Consultas de más de una tabla INVESTIGADOR id_inv nom_inv N categ trabaja N proy_id N PROYECTO nombre tema corresponde duracio n 1 id_inst INSTITUTO nombre facultad Ej. 10: Obtener los nombres de los proyectos del Instituto Inst2 SELECT PROYECTO.nombre FROM PROYECTO, INSTITUTO WHERE PROYECTO. id_inst = INSTITUTO. id_inst AND INSTITUTO. nombre = ´Inst2´; Ej. 11: Listar los id. y nombre de los investigadores junto con el id. del instituto en que trabajan SELECT I.id_inv, I.nom_inv, P.id_inst FROM INVESTIGADOR I, TRABAJA T, PROYECTO P WHERE P.proy_id =T.proy_id AND I.id_inv=T.id_inv; Bases de Datos I 10 5 Unión en SQL • Se requiere que ambas tablas tengan tipos de datos compatibles. SELECT * FROM R UNION [ALL] SELECT * FROM S; • El operador elimina filas duplicadas, aunque se pueden conservar usando la cláusula ALL a continuación de UNION. • Mediante la cláusula CORRESPONDING, seguida por una lista de nombres de columna, se permite unir dos tablas que no tienen exactamente el mismo esquema Æ Incluye solo las columnas indicadas, como si se hiciera una proyección (si no se incluye la lista, genera un resultado con solo las columnas comunes a ambas tablas) SELECT * FROM R UNION CORRESPONDING [ BY(col1, col2, …)] [ALL] SELECT * FROM S; Bases de Datos I 11 Intersección • La INTERSECCIÓN entre R y S (unión compatibles) genera otra relación de igual esquema y cuyas tuplas son todas las de R y S. SELECT * FROM R INTERSECT SELECT * FROM S; R: A a1 a2 B b1 b2 S: A a1 a3 B b1 b1 R INTERSECT S A B a1 b1 • También se puede usar ALL y CORRESPONDING R: A a1 a2 a2 a3 B b1 b2 b2 b1 S: A a1 a2 a2 a2 B b1 b2 b2 b2 R INTERSECT ALL S A B a1 b1 a2 b2 a2 b2 Bases de Datos I 12 6 Diferencia • La DIFERENCIA entre R y S (unión compatibles) genera otra relación de igual esquema cuyas tuplas son todas las pertenecientes a R y no a S. SELECT * FROM R EXCEPT SELECT * FROM S; o MINUS • Ej.: R: A a1 a2 B b1 b2 S: A a1 a3 B b1 b1 R MINUS S: A B a2 b2 S MINUS R: A B a3 b1 • También se puede usar ALL y CORRESPONDING R: A a1 a2 a2 B b1 b2 b2 S: A a1 a1 a3 B b1 b1 b1 R MINUS ALL S: A B a2 b2 a2 b2 Bases de Datos I S MINUS ALL R: A B a1 b1 a3 b1 13 7