Las subconsultas correlacionadas se utilizan para el procesamiento fila por fila. Cada subconsulta se ejecuta una vez por cada fila de la consulta externa.
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