La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CONSULTAS ANIDADAS. Tema 2. Modelo relacional de datos Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta ( consulta exterior.

Presentaciones similares


Presentación del tema: "CONSULTAS ANIDADAS. Tema 2. Modelo relacional de datos Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta ( consulta exterior."— Transcripción de la presentación:

1 CONSULTAS ANIDADAS

2 Tema 2. Modelo relacional de datos Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta ( consulta exterior ) Obtiene valores de la BD que se usan en la condición de otra consulta, para obtener otros datos * Números de los proyectos en que participa el empleado de apellido Silva, sea como trabajador o como gerente del departamento que controla el proyecto SELECT DISTINCT numerop FROM PROYECTO WHERE numerop IN ( SELECT nump FROM Trabaja_en, Empleado WHERE nsse=nss AND apellido=Silva ) OR numerop IN ( SELECT numerop FROM Proyecto, Departamento, Empleado WHERE numd=númerod AND nssdire=nss AND apellido=Silva ) ; Es posible tener varios niveles de consultas anidadas Consultas anidadas 2.4 Manipulación de datos: SQL-92

3 Tema 2. Modelo relacional de datos Operador IN (otro uso del mismo operador) t IN S indica si la fila t pertenece al conjunto de filas S (subconsulta) * Nombre y dirección de los empleados que trabajan en algún proyecto. SELECT nombre, dirección FROM Empleado WHERE nss IN ( SELECT nsse FROM TRABAJA_EN ) ; * Números de seguridad social de aquellos empleados que trabajan en algún proyecto en el que trabaje el empleado José B. Silva, de forma que ambos tengan la misma combinación (proyecto, horas); es decir, todo empleado que trabaje las mismas horas que José B. Silva, en cada proyecto en el que trabajen ambos. El nss de José B. Silva es SELECT DISTINCT nsse FROM Trabaja_en WHERE (númp, horas) IN ( SELECT númp, horas FROM Trabaja_en WHERE nsse= ) ; Consultas anidadas (2) : comparar conjuntos 2.4 Manipulación de datos: SQL-92

4 Tema 2. Modelo relacional de datos Operador ANY o SOME (otro uso del mismo operador) t ANY S o t SOME S,, {,,,,, } Compara una fila t con las filas resultado de una consulta anidada S Devuelve TRUE si alguna fila e de S cumple que t e Operador ALL (otro uso del mismo operador) t ALL S,, {,,,,, } Compara una fila t con filas resultado de una consulta anidada S Devuelve TRUE si para toda fila e de S se cumple que t e * Nombres y apellidos de los empleados cuyo salario es menor que el de todos los empleados del departamento 5 SELECT nombre, apellido FROM Empleado WHERE salario < ALL ( SELECT salario FROM Empleado WHERE nd=5 ); Consultas anidadas (3) : comparar conjuntos 2.4 Manipulación de datos: SQL-92 ¿Mejor con DISTINCT en la subconsulta?

5 Tema 2. Modelo relacional de datos Coincidencia de nombres de columnas en las consultas exterior y anidada Ambigüedad * Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nsse=nss AND nombre_familiar=nombre AND sexo=sexo ); ¿cómo evitar esta ambigüedad? Regla: Una columna no calificada se refiere a la tabla declarada en la consulta anidada más interior Si en una consulta anidada es necesario usar columnas de tablas declaradas en una consulta exterior calificar * Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él SELECT nombre, apellido FROM Empleado E WHERE nss IN ( SELECT nsse FROM Familiar WHERE nss=nsse AND nombre_familiar=nombre AND sexo= E.sexo ); Consultas anidadas (4) : columnas ambiguas 2.4 Manipulación de datos: SQL-92

6 Tema 2. Modelo relacional de datos Una consulta exterior y otra anidada están correlacionadas si una condición de la anidada contiene columnas de una tabla declarada en la consulta exterior SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nss =nsse AND sexo=F ); La consulta anidada se evalúa una vez para cada fila (o combinación de filas) de la consulta exterior Evalúa la consulta anidada para cada fila de EMPLEADO, Si el valor de nss de la fila EMPLEADO está en el resultado de la consulta anidada, selecciona la fila EMPLEADO para el resultado final Una consulta anidada que use el operador = o IN siempre puede expresarse como una reunión (join) SELECT E.nombre, E.apellido FROM Empleado, Familiar D WHERE nss=nsse AND D.sexo=F; Consultas anidadas (5) : correlación 2.4 Manipulación de datos: SQL-92

7 Tema 2. Modelo relacional de datos Operador EXISTS (S) : comprobación de tablas vacías Devuelve TRUE si la tabla S contiene al menos una fila Devuelve FALSE si S es una tabla vacía (sin filas) S suele ser una consulta anidada correlacionada * Nombre y apellido de cada empleado con familiares de igual nombre y sexo que él SELECT E.nombre, E.apellido FROM Empleado E WHERE EXISTS ( SELECT * FROM Familiar WHERE nsse= nss AND nombre_familiar= nombre AND sexo= E.sexo ); * Nombres de empleados sin familiares SELECT nombre, apellido FROM Empleado E WHERE NOT EXISTS (SELECT * FROM Familiar WHERE nsse= nss ); Consultas anidadas (6) : EXISTS 2.4 Manipulación de datos: SQL-92

8 Tema 2. Modelo relacional de datos Operador UNIQUE (S) : Comprobación de filas duplicadas Devuelve TRUE si NO hay filas repetidas en S S suele ser una consulta anidada correlacionada * Nombres y apellidos de los empleados que trabajan en un único proyecto SELECT nombre, apellido FROM Empleado WHERE UNIQUE ( SELECT nsse FROM Trabaja_en WHERE nsse = nss ); * Nombres, apellidos y salario de los empleados con un solo familiar SELECT nombre, apellido, salario FROM Empleado WHERE UNIQUE ( SELECT * FROM Familiar WHERE nsse = nss ); Consultas anidadas (y 7) : UNIQUE 2.4 Manipulación de datos: SQL-92


Descargar ppt "CONSULTAS ANIDADAS. Tema 2. Modelo relacional de datos Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta ( consulta exterior."

Presentaciones similares


Anuncios Google