Subconsulta correlacionada SQL
Resumen: en este tutorial, aprenderá sobre la subconsulta correlacionada SQL, que es una subconsulta que utiliza valores de la consulta externa.
Introducción a la subconsulta correlacionada SQL
Comencemos con un ejemplo.
el siguiente employees
tabla en la base de datos de ejemplo:
La siguiente consulta busca los empleados cuyo salario es mayor que el salario promedio de todos los empleados:
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
En este ejemplo, la subconsulta se utiliza en el WHERE
cláusula. Hay algunos puntos que puede ver en esta consulta:
Primero, puede ejecutar la subconsulta que devuelve el salario promedio de todos los empleados de forma independiente.
SELECT AVG(salary)FROM employees;
En segundo lugar, el sistema de base de datos solo necesita evaluar la subconsulta una vez.
En tercer lugar, la consulta externa hace uso del resultado devuelto por la subconsulta. La consulta externa depende de la subconsulta para su valor. Sin embargo, la subconsulta no depende de la consulta externa. A veces, llamamos a esta subconsulta una subconsulta simple.
A diferencia de una subconsulta simple, una subconsulta correlacionada es una subconsulta que utiliza los valores de la consulta externa. Además, se puede evaluar una subconsulta correlacionada una vez por cada fila seleccionada por la consulta externa. Debido a esto, una consulta que utiliza una subconsulta correlacionada puede ser lenta.
Una subconsulta correlacionada también se conoce como subconsulta repetitiva o subconsulta sincronizada.
Ejemplos de subconsultas correlacionadas SQL
Veamos algunos ejemplos más de subconsultas correlacionadas para entenderlas mejor.
Subconsulta correlacionada SQL en el ejemplo de cláusula WHERE
La siguiente consulta encuentra a todos los empleados cuyo salario es superior al salario promedio de los empleados en sus departamentos:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)ORDER BY department_id , first_name , last_name;
Aquí está la salida:
En este ejemplo, la consulta externa es:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
y la subconsulta correlacionada es:
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
Para cada empleado, el sistema de base de datos para ejecutar la subconsulta correlacionada una vez para calcular el salario promedio de los empleados en el departamento de los empleados actuales.
Subconsulta correlacionada SQL en el ejemplo de cláusula SELECT
La siguiente consulta devuelve los empleados y el salario promedio de todos los empleados de sus departamentos:
SELECT employee_id, first_name, last_name, department_name, salary, (SELECT ROUND(AVG(salary),0) FROM employees WHERE department_id = e.department_id) avg_salary_in_departmentFROM employees e INNER JOIN departments d ON d.department_id = e.department_idORDER BY department_name, first_name, last_name;
El resultado es:
Para cada empleado, el sistema de base de datos tiene que ejecutar la subconsulta correlacionada una vez para calcular el salario promedio del departamento del empleado.
Subconsulta correlacionada SQL con operador EXISTS ejemplo
A menudo usamos una subconsulta correlacionada con el operador EXISTS
. Por ejemplo, la siguiente consulta devuelve todos los empleados que no tienen dependientes:
SELECT employee_id, first_name, last_nameFROM employees eWHERE NOT EXISTS( SELECT * FROM dependents d WHERE d.employee_id = e.employee_id)ORDER BY first_name , last_name;
La siguiente imagen muestra la salida:
En este tutorial, ha aprendido sobre la subconsulta correlacionada SQL y cómo aplicarla para formar una consulta compleja.
- ¿Fue útil este tutorial ?
- YesNo
Leave a Reply