Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Un grupo se puede entender como un conjunto de filas con el mismo valor para el conjunto de columnas por las que se agrupa (las incluidas en la cláusula GROUP BY). Obtener el el nombre de de cada equipo y la la edad media de de los los ciclistas de de dicho equipo: select nomeq, AVG(edad) from Ciclista group by nomeq ; Nomeq Edad Banesto 22 ONCE 25 PDM 32 Banesto 25 Kelme 28 ONCE 30 Kelme 29 Banesto 28 Bases de Datos Curso 2006/07 DSIC-UPV 1 Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Las funciones agregadas en las consultas agrupadas funcionan de forma diferente que en las consultas normales, devolviendo un valor por cada grupo formado. Nomeq Edad Banesto 22 Banesto 25 Banesto 28 ONCE 25 Un Valor ONCE 30 por Grupo PDM 32 Kelme 29 Kelme 28 select nomeq, AVG(edad) from Ciclista group by by nomeq ; Bases de Datos Curso 2006/07 DSIC-UPV 2
Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Entonces para la consulta: select nomeq, AVG(edad) from Ciclista group by by nomeq ; La solución, es: Nomeq Edad Banesto 25 ONCE 27,5 PDM 32 Kelme 28,5 Bases de Datos Curso 2006/07 DSIC-UPV 3 Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Ejemplo incorrecto: select nomeq, nombre, AVG(edad) from Ciclista group by by nomeq ; La La regla sintáctica que que aplican los los sistemas relacionales para asegurar el el buen funcionamiento de de las las consultas agrupadas es es la la siguiente: en en la la selección de de una una consulta agrupada, sólo pueden aparecer referencias a columnas por por las las cuales se se agrupa, referencias a funciones agregadas o literales. Bases de Datos Curso 2006/07 DSIC-UPV 4
Consultas Complejas: SELECCIÓN-AGRUPAMIENTO GROUP y WHERE: Si Si se se incluye la la cláusula where, la la aplicación de de esta cláusula se se produce previamente a la la agrupación 4 1 2 3 select nomeq, AVG(edad) from Ciclista where edad>25 group by by nomeq ; Bases de Datos Curso 2006/07 DSIC-UPV 5 Consultas Complejas: SELECCIÓN-AGRUPAMIENTO GROUP, WHERE y HAVING: La La cláusula HAVING sólo puede ir ir en en consultas agrupadas y es es similar a WHERE, pero en en un un orden diferente: 1º) 1º) Condición WHERE (se (se usa usa para las las filas) 2º) 2º) Agrupamiento y cálculo de de valores agregados 3º) 3º) Condición HAVING (se (se usa usa para los los grupos) En En la la cláusula HAVING sólo podrán aparecer directamente referencias a columnas por por las las cuales se se agrupan o a funciones agregadas. Bases de Datos Curso 2006/07 DSIC-UPV 6
Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Obtener el el nombre de de cada equipo y la la edad media de de sus sus ciclistas con con más más de de 25 25 años, de de aquellos equipos con con más más de de 3 corredores mayores de de 25 25 años. select nomeq, AVG(edad) from Ciclista where edad>25 group by by nomeq having COUNT(dorsal)>3; Bases de Datos Curso 2006/07 DSIC-UPV 7 Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Obtener el el nombre del del ciclista y el el número de de puertos que que ha ha ganado, siendo la la media de de la la pendiente de de éstos superior a 10. 10. select C.nombre, COUNT(P.nompuerto) from Ciclista C, C, Puerto P where C.dorsal=P.dorsal group by by dorsal, nombre Agrupar siempre por por CP CP having AVG(P.pendiente)>10; Bases de Datos Curso 2006/07 DSIC-UPV 8
Trabajo a realizar Consultas Agrupadas y Generales (Ciclismo, Música y Biblioteca) Bases de Datos Curso 2006/07 DSIC-UPV 9 Combinaciones de Tablas Existen varias formas de de combinar dos dos tablas en en el el lenguaje SQL SQL dando lugar a una una expresión de de tabla : 1º) 1º) Incluir varias tablas en en la la cláusula FROM. 2º) 2º) Uso Uso de de subconsultas en en las las condiciones de de las las cláusulas WHERE o HAVING. 3º) 3º) Combinaciones conjuntistas de de tablas: utilizando operadores de de la la teoría de de conjuntos para combinar las las tablas. 4º) 4º) Concatenaciones de de tablas: utilizando diferentes formas variantes del del operador concatenación del del Álgebra Relacional. Bases de Datos Curso 2006/07 DSIC-UPV 10
Combinaciones Conjuntistas de Tablas Corresponden a los los operadores unión, diferencia e intersección del del Álgebra Relacional: 1º) 1º) UNION 2º) 2º) EXCEPT 3º) 3º) INTERSECT Permiten combinar tablas que que tengan esquemas compatibles. Bases de Datos Curso 2006/07 DSIC-UPV 11 Combinaciones Conjuntistas de Tablas UNIÓN: expresión_tabla union [all] término_tabla Realiza la la unión de de las las filas de de las las tablas provenientes de de las las dos dos expresiones. Se Se permitirán o no no duplicados según se se incluya o no no la la opción all. Obtener el el nombre de de todo el el personal de de la la vuelta: (select nombre from Ciclista) UNION (select director from Equipo); Bases de Datos Curso 2006/07 DSIC-UPV 12
Combinaciones Conjuntistas de Tablas INTERSECCIÓN: expresión_tabla intersect término_tabla Realiza la la intersección de de las las filas de de las las tablas provenientes de de las las dos dos expresiones. Obtener los los nombres de de las las personas que que son son tanto ciclistas como directores de de equipo : (select nombre from Ciclista) INTERSECT (select director from Equipo); Bases de Datos Curso 2006/07 DSIC-UPV 13 Combinaciones Conjuntistas de Tablas DIFERENCIA: expresión_tabla except término_tabla En Oracle es Minus Realiza la la diferencia de de las las filas de de las las tablas provenientes de de las las dos dos expresiones. Obtener los los nombres que que aparecen en en la la tabla de de ciclistas y no no en en la la de de directores: (select nombre from Ciclista) MINUS (select director from Equipo); Bases de Datos Curso 2006/07 DSIC-UPV 14
Concatenaciones de Tablas Corresponden a variantes del del operador concatenación del del Álgebra Relacional: 1º) Producto cartesiano (cross join) 2º) Concatenación interna (natural join) 3º) Concatenación externa (Left, Right, Full) 4º) Concatenación unión (union join) Bases de Datos Curso 2006/07 DSIC-UPV 15 Concatenaciones de Tablas Producto Cartesiano (cross join): tabla1 CROSS JOIN tabla2 Equivale a: a: SELECT * FROM tabla1, tabla2 Bases de Datos Curso 2006/07 DSIC-UPV 16
Concatenaciones de Tablas Concatenación Interna (1): referencia_tabla [natural] join [inner]referencia_tabla [on [on expresión_condicional using (comalista_columna) ] tabla1 JOIN tabla2 ON ON expresión_condicional Equivale a: a: Select * FROM tabla1, tabla2 WHERE expresión_condicional Bases de Datos Curso 2006/07 DSIC-UPV 17 Concatenaciones de Tablas Concatenación Interna (2): tabla1 JOIN tabla2 USING (c1, c2,.., cn) Equivale a: a: tabla1 JOIN tabla2 ON ON tabla1.c1 = tabla2.c1 AND tabla1.c2 = tabla2.c2 AND AND tabla1.cn = tabla2.cn Equivale a: a: Select * FROM tabla1, tabla2 WHERE tabla1.c1 = tabla2.c1 AND tabla1.c2 = tabla2.c2 AND AND tabla1.cn = tabla2.cn Bases de Datos Curso 2006/07 DSIC-UPV 18
Concatenaciones de Tablas Concatenación Interna (3): tabla1 NATURAL JOIN tabla2 Equivale a: a: tabla1 join tabla2 using ( c1, c2,..., cn) Donde tabla1 y tabla2 tienen n atributos Es Es un un JOIN por todos los atributos comunes de de las tablas). Bases de Datos Curso 2006/07 DSIC-UPV 19 Concatenaciones de Tablas Concatenación Interna (4): Obtener el el dorsal y nombre de de los los ciclistas que que han han llevado maillots: SELECT cl.dorsal, cl.nombre FROM (Ciclista NATURAL JOIN Llevar) AS AS cl; Equivale a: a: SELECT c.dorsal, c.nombre FROM Ciclista c, c, Llevar l WHERE c.dorsal = l.dorsal; Bases de Datos Curso 2006/07 DSIC-UPV 20
Concatenaciones de Tablas Concatenación Externa (1): referencia_tabla [natural] {left [outer] right [outer] full [outer] } JOIN referencia_tabla [on [on expresión_condicional using (comalista_columna) ] FULL, se se muestran las tuplas no no concatenadas de de tabla1 y tabla2 Bases de Datos Curso 2006/07 DSIC-UPV 21 Concatenaciones de Tablas Concatenación Externa (2): tabla1 LEFT ON JOIN tabla2 ON expresión_condicional (Concat. interna de de tabla1 y tabla2) union (tuplas de de la la tabla1 que no no están en en la la concatenación interna con valores nulos en en el el resto de de columnas) RIGHT equivale a LEFT con la la diferencia de de que las tuplas que se se muestran son las de de tabla2. Bases de Datos Curso 2006/07 DSIC-UPV 22
Concatenaciones de Tablas Concatenación Externa (3): EJERCICIO 33: 33: Obtener nombre de de todos los los equipos indicando cuantos ciclistas tiene cada uno: 1ª 1ª Opción (Incorrecta) SELECT e.nomeq, count(c.dorsal) FROM Equipo E, E, Ciclista C WHERE E.nomeq=C.nomeq GROUP BY BY e.nomeq; 2ª 2ª Opción (Correcta) SELECT e.nomeq, count(c.dorsal) El equipo PDM con 0 ciclistas no aparece FROM ( Equipo E LEFT JOIN Ciclista C ) on on E.nomeq=C.nomeq GROUP BY BY e.nomeq; Bases de Datos Curso 2006/07 DSIC-UPV 23 Concatenaciones de Tablas Concatenación Externa (4): EJERCICIO 33: 33: Obtener nombre de de todos los los equipos indicando cuantos ciclistas tiene cada uno: En En versiones anteriores de de ORACLE No No existe el el JOIN como tal. SELECT e.nomeq, count(c.dorsal) FROM Equipo E, E, Ciclista C WHERE E.nomeq=C.nomeq(+) GROUP BY BY e.nomeq; Se pone (+) en la parte de la ICA de la tabla de la que no se quieren mantener las tuplas Bases de Datos Curso 2006/07 DSIC-UPV 24
Concatenaciones de Tablas Concatenación Unión: tabla1 UNION JOIN tabla2 Crea una tabla donde el el esquema es es la la unión de de los esquemas de de las dos tablas, que pueden ser distintos. tuplas de de tabla1 con valores nulos en en las columnas de de tabla2 union tuplas de de tabla2 con valores nulos en en las columnas de de tabla1. Bases de Datos Curso 2006/07 DSIC-UPV 25 Introducción n de Información Instrucción INSERT: insert into tabla [(comalista_columna)] {default values values (comalista_átomos) expresión_tabla} Si no se incluye la lista de columnas se deberán insertar filas completas de tabla. Si se incluye la opción default values se insertará una única fila en la tabla con los valores por defecto apropiados en cada columna (según la definición de tabla). En la opción values (comalista_átomos) los átomos vienen dados por expresiones escalares. En la opción expresión_tabla, se insertarán las filas resultantes de la ejecución de la expresión ( SELECT ). Bases de Datos Curso 2006/07 DSIC-UPV 26
Introducción n de Información Instrucción INSERT: Añadir un un ciclista de de dorsal 101, nombre Joan Peris, edad 20 20 años y del del equipo Kelme : insert into Ciclista values (101, Joan Peris, 20, Kelme ); Bases de Datos Curso 2006/07 DSIC-UPV 27 Modificación n de Información Instrucción UPDATE: update tabla set comalista_asignaciones [where expresión_condicional] En donde una asignación es de la forma: columna = {default null expresión_escalar} Si se incluye la cláusula where sólo se aplicará a las filas que hagan cierta la condición. Bases de Datos Curso 2006/07 DSIC-UPV 28
Modificación n de Información Instrucción UPDATE: Incrementar un un 10% 10% la la pendiente del del puerto Aitana al al haberse cerrado la la carretera que que había en en buen estado y ser ser necesario subir por por otra peor: UPDATE Puerto SET pendiente = pendiente * 1.10 WHERE nompuerto = Aitana ; Bases de Datos Curso 2006/07 DSIC-UPV 29 Eliminación n de Información Instrucción DELETE: delete from tabla [where expresión_condicional] Si se incluye la cláusula where se eliminarán aquéllas que hagan cierta la condición. Eliminar la la información del del ciclista Miguel Indurain ya ya que que se se ha ha jubilado: DELETE FROM Ciclista WHERE nombre = Miguel Indurain ; Bases de Datos Curso 2006/07 DSIC-UPV 30
Trabajo a realizar Consultas Generales (Ciclismo, Música y Biblioteca) Bases de Datos Curso 2006/07 DSIC-UPV 31