02 Subconsultas Avanzadas
02 Subconsultas Avanzadas
02 Subconsultas Avanzadas
Objetivos
Al finalizar esta leccin, debera estar capacitado para:
Escribir una subconsulta en una clusula FROM Utilizar subconsultas escalares en SQL Describir los tipos de problemas que se pueden
resolver con subconsultas correlacionadas
Qu Es una Subconsulta?
Una subconsulta es una sentencia SELECT que est embebida en una clusula de otra sentencia SQL.
Consulta principal
Subconsulta
18-3
Subconsultas
SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);
18-4
18-5
Subconsulta
100 102 124 90 60 50
Cada fila de la consulta principal se compara con los valores de una subconsulta de varias filas y de varias columnas.
18-6
Comparaciones de Columnas
18-7
SELECT employee_id, manager_id, department_id FROM employees WHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM employees WHERE employee_id IN (178,174)) AND employee_id NOT IN (178,174);
18-8
AND
AND
18-9
WHERE AND
a.last_name, a.salary, a.department_id, b.salavg employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b a.department_id = b.department_id a.salary > b.salavg;
18-10
en:
18-11
18-12
Subconsultas Correlacionadas
Las subconsultas correlacionadas se utilizan para el procesamiento fila a fila. Cada subconsulta se ejecuta una vez para cada fila de la consulta externa.
OBTENER posible fila de consulta externa
18-14
Subconsultas Correlacionadas
SELECT column1, column2, ... outer FROM table1 WHERE column1 operator (SELECT FROM WHERE
18-15
18-16
Y SI USAMOS EL FROM???? SELECT e.employee_id, last_name,e.job_id, c.conteo FROM employees e, (select employee_id, count(employee_id)as conteo from job_history group by employee_id) c WHERE e.employee_id = c.employee_id and 2 <= c.conteo;
18-17
18-18
18-19
18-20
UPDATE Correlacionado
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
Utilice una subconsulta correlacionada para actualizar las filas de una tabla basadas en las filas de otra tabla.
18-21
UPDATE Correlacionado
Desnormalice la tabla EMPLOYEES agregando una columna que almacene el nombre de departamento.
UPDATE employees e SET department_name = (SELECT department_name FROM departments d WHERE e.department_id = d.department_id);
18-22
DELETE Correlacionado
DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
Utilice una subconsulta correlacionada para suprimir las filas de una tabla basadas en filas de otra tabla.
18-24
DELETE Correlacionado
Utilice una subconsulta correlacionada para suprimir solamente las filas de la tabla EMPLOYEES que tambin existen en la tabla EMP_HISTORY.
DELETE FROM employees E WHERE employee_id = (SELECT employee_id FROM emp_history WHERE employee_id = E.employee_id);
18-25
La Clusula WITH
Con la clusula WITH, puede utilizar el mismo bloque de
consulta en una sentencia SELECT cuando se produce ms de una vez dentro de una consulta compleja.
18-26
Mientras utiliza la clusula WITH, escriba una consulta que muestre el nombre de departamento y los salarios totales de los departamentos cuyos salarios totales sean mayores que el salario medio de los departamentos.
18-27
18-28
EJERCICIO DESARROLLADO Escriba una consulta para mostrar los apellidos de los empleados que ganen menos que el salario medio en sus departamentos.
SOLUCION 1 EN EL FROM
select e.last_name, e.salary, e.department_id, p.salprom from employees e,(select avg(salary) salprom,department_id from employees group by department_id) p where e.department_id = p.department_id and e.salary<=p.salprom
SOLUCION 2 EN EL WHERE
select last_name, salary, department_id from employees outer where salary<=(select avg(salary) from employees group by department_id having department_id = outer.department_id)
18-29
Resumen
18-30
Resumen
Las subconsultas correlacionadas son tiles cada vez
que una subconsulta deba devolver un resultado diferente para cada posible fila.
18-31
Creacin de subconsultas de varias columnas Escritura de subconsultas correlacionadas Uso del operador EXISTS
18-32
EJERCICIOS
Listar nicamente los apellidos de los empleados que
sean jefes (manager_id) , acompaados de la cantidad de trabajadores que tienen a su cargo.
18-33
EJERCICIOS 1
Listar nicamente los apellidos de los empleados que
sean jefes (manager_id) , acompaados de la cantidad de trabajadores que tienen a su cargo , siempre y cuando la tenga mas de 5 trabajadores a su cargo
18-34
EJERCICIOS 2
Escriba una consulta para mostrar el identificador de
empleado, sus apellidos y nombres, y asi como los nombres de departamento de todos los empleados. Nota: Utilice una subconsulta escalar para recuperar el nombre de departamento en la sentencia SELECT.
18-35
EJERCICIOS 3
Muestre los detalles del identificador de empleado, el
apellido y el identificador de departamento de los empleados que vivan en ciudades cuyos nombres comiencen por T.
18-36
EJERCICIOS 4
Escriba una consulta para mostrar los apellidos de los
empleados que ganen menos que el salario medio en sus departamentos.
18-37
EJERCICIOS 5
Escriba una consulta para mostrar los apellidos de los
empleados que ganen menos que el salario medio en sus departamentos.
18-38
EJERCICIOS 6
Realice un query que permita buscar TODOS los
departamentos que si tengan empleados
18-39
EJERCICIOS 7
Realice un query que permita buscar TODOS los
departamentos que si tengan empleados
18-40
Ejercicios 8
Realice un query que permita buscar solo los
departamentos que pertenescan al la region 2 y que si tengan empleados.
18-41
Ejercicios 9
Realice un query que permita buscar solo los
departamentos que pertenescan al la region 2 y que no tengan empleados.
18-42
Ejercicios 10
Visualice detalles de los empleados que han cambiado
al menos tres veces de cargo.
18-43
Ejercicios 11
Visualice los apellidos de los empleados (ordenados
descendentemente) que son dirigidos por el mismo director que del empleado shannon y que trabajen en el mismo departamento que del empleado shannon.
18-44
Ejercicios
Para resolver el ejercicio 2 se propone la sgte solucion
18-45