Subconsultas correlacionadas de SQL

Las subconsultas correlacionadas se utilizan para el procesamiento fila por fila. Cada subconsulta se ejecuta una vez por cada fila de la consulta externa.
SQL_Correlated_Subqueries
Una subconsulta correlacionada se evalúa una vez por cada fila procesada por la instrucción principal. La instrucción principal puede ser una instrucción SELECT , UPDATE o DELETE .

SELECT column1, column2, ....
FROM table1 outer
WHERE column1 operator
                    (SELECT column1, column2
                     FROM table2
                     WHERE expr1 = 
                               outer.expr2);

Una subconsulta correlacionada es una forma de leer cada fila de una tabla y comparar los valores de cada fila con los datos relacionados. Se utiliza cuando una subconsulta debe devolver un resultado diferente o un conjunto de resultados para cada fila candidata considerada por la consulta principal. En otras palabras, puede usar una subconsulta correlacionada para responder una pregunta de varias partes cuya respuesta depende del valor de cada fila procesada por la instrucción principal.

Subconsultas anidadas versus subconsultas correlacionadas:

Con una subconsulta anidada normal, la consulta SELECT interna se ejecuta primero y se ejecuta una vez, devolviendo valores para ser utilizados por la consulta principal. Sin embargo, una subconsulta correlacionada se ejecuta una vez para cada fila candidata considerada por la consulta externa. En otras palabras, la consulta interna está impulsada por la consulta externa.
NOTA: También puede usar el operador ANY y ALL en una subconsulta correlacionada.
EJEMPLO de Subconsultas Correlacionadas: Encuentre todos los empleados que ganan más que el salario promedio en su departamento.

SELECT last_name, salary, department_id
 FROM employees outer
 WHERE salary >
                (SELECT AVG(salary)
                 FROM employees
                 WHERE department_id =
                        outer.department_id);

Otro uso de la correlación está en ACTUALIZAR y ELIMINAR

ACTUALIZACIÓN CORRELACIONADA:

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 en función de las filas de otra tabla.

ELIMINACIÓN CORRELACIONADA:

DELETE FROM table1 alias1
 WHERE column1 operator
               (SELECT expression
                FROM table2 alias2
                WHERE alias1.column = alias2.column);

Use una subconsulta correlacionada para eliminar filas en una tabla en función de las filas de otra tabla.

Usando el operador EXISTS:

El operador EXISTS prueba la existencia de filas en el conjunto de resultados de la subconsulta. Si se encuentra un valor de fila de subconsulta, la condición se marca como VERDADERO y la búsqueda no continúa en la consulta interna, y si no se encuentra, la condición se marca como FALSO y la búsqueda continúa en la consulta interna.
EJEMPLO de uso del operador EXIST:
busque empleados que tengan al menos una persona a su cargo.

SELECT employee_id, last_name, job_id, department_id
FROM employees outer
WHERE EXISTS ( SELECT ’X’
FROM employees
WHERE manager_id =
outer.employee_id);

PRODUCCIÓN :

EJEMPLO de uso del operador NO EXISTE:
Encuentre todos los departamentos que no tienen empleados.

SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT ’X’
FROM employees
WHERE department_id
= d.department_id);

PRODUCCIÓN :

Publicación traducida automáticamente

Artículo escrito por MrinalVerma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Categories SQL

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *