Articles

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:

SQL Subconsulta Correlacionada: Los empleados de la Tabla

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);
SQL Subconsulta ejemplo

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:

SQL Subconsulta Correlacionada Ejemplo

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:

Subconsulta correlacionada SQL en la cláusula SELECT

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:

Subconsulta correlacionada SQL con el operador EXISTS

En este tutorial, ha aprendido sobre la subconsulta correlacionada SQL y cómo aplicarla para formar una consulta compleja.

  • ¿Fue útil este tutorial ?
  • YesNo