Introducción
Las subconsultas correlacionadas son un tipo especial de subconsulta en SQL donde la subconsulta se refiere a una columna de la tabla principal de la consulta externa. Esto significa que la subconsulta se ejecuta una vez por cada fila procesada por la consulta externa.
Conceptos Clave
- Subconsulta: Una consulta dentro de otra consulta.
- Subconsulta correlacionada: Una subconsulta que se refiere a una columna de la consulta externa.
- Consulta externa: La consulta principal que contiene la subconsulta.
Sintaxis Básica
La sintaxis básica de una subconsulta correlacionada es la siguiente:
SELECT column1, column2, ... FROM table1 AS t1 WHERE columnX OPERATOR (SELECT columnY FROM table2 AS t2 WHERE t1.columnZ = t2.columnZ);
OPERATOR
puede ser cualquier operador de comparación como=
,<
,>
,<=
,>=
,<>
.t1
yt2
son alias paratable1
ytable2
, respectivamente.
Ejemplo Práctico
Supongamos que tenemos dos tablas: Employees
y Departments
.
Tabla Employees
EmployeeID | Name | DepartmentID | Salary |
---|---|---|---|
1 | Alice | 1 | 50000 |
2 | Bob | 2 | 60000 |
3 | Charlie | 1 | 55000 |
4 | David | 3 | 70000 |
5 | Eve | 2 | 65000 |
Tabla Departments
DepartmentID | DepartmentName |
---|---|
1 | HR |
2 | IT |
3 | Finance |
Queremos encontrar los empleados cuyo salario es mayor que el salario promedio de su departamento.
SELECT Name, Salary FROM Employees AS e1 WHERE Salary > (SELECT AVG(Salary) FROM Employees AS e2 WHERE e1.DepartmentID = e2.DepartmentID);
Explicación del Código
-
Consulta Externa:
SELECT Name, Salary FROM Employees AS e1 WHERE Salary > ...
- Selecciona el
Name
ySalary
de la tablaEmployees
con aliase1
.
- Selecciona el
-
Subconsulta Correlacionada:
(SELECT AVG(Salary) FROM Employees AS e2 WHERE e1.DepartmentID = e2.DepartmentID)
- Calcula el salario promedio (
AVG(Salary)
) de la tablaEmployees
con aliase2
. - La condición
WHERE e1.DepartmentID = e2.DepartmentID
asegura que el salario promedio se calcula para el mismo departamento del empleado en la consulta externa.
- Calcula el salario promedio (
Ejercicio Práctico
Ejercicio
Dada la siguiente tabla Sales
:
SaleID | ProductID | SalespersonID | Amount |
---|---|---|---|
1 | 101 | 1 | 500 |
2 | 102 | 2 | 300 |
3 | 101 | 1 | 700 |
4 | 103 | 3 | 200 |
5 | 102 | 2 | 400 |
Encuentra los SalespersonID
que han realizado ventas mayores que el promedio de ventas de todos los productos.
Solución
SELECT SalespersonID, Amount FROM Sales AS s1 WHERE Amount > (SELECT AVG(Amount) FROM Sales AS s2 WHERE s1.ProductID = s2.ProductID);
Explicación del Código
-
Consulta Externa:
SELECT SalespersonID, Amount FROM Sales AS s1 WHERE Amount > ...
- Selecciona el
SalespersonID
yAmount
de la tablaSales
con aliass1
.
- Selecciona el
-
Subconsulta Correlacionada:
(SELECT AVG(Amount) FROM Sales AS s2 WHERE s1.ProductID = s2.ProductID)
- Calcula el monto promedio (
AVG(Amount)
) de la tablaSales
con aliass2
. - La condición
WHERE s1.ProductID = s2.ProductID
asegura que el monto promedio se calcula para el mismo producto de la venta en la consulta externa.
- Calcula el monto promedio (
Errores Comunes
- No correlacionar correctamente la subconsulta: Asegúrate de que la subconsulta se refiere a la columna correcta de la consulta externa.
- Uso incorrecto de alias: Utiliza alias claros y consistentes para evitar confusiones.
- Subconsultas que devuelven múltiples filas: Asegúrate de que la subconsulta correlacionada devuelva un solo valor para cada fila de la consulta externa.
Conclusión
Las subconsultas correlacionadas son una herramienta poderosa en SQL que te permite realizar consultas complejas y específicas. Al entender cómo funcionan y cómo se estructuran, puedes aprovechar al máximo su potencial para filtrar y analizar datos de manera eficiente.
Curso de SQL
Módulo 1: Introducción a SQL
Módulo 2: Consultas básicas de SQL
- Instrucción SELECT
- Filtrando datos con WHERE
- Ordenando datos con ORDER BY
- Limitando resultados con LIMIT
Módulo 3: Trabajando con múltiples tablas
Módulo 4: Filtrado avanzado de datos
- Usando LIKE para coincidencia de patrones
- Operadores IN y BETWEEN
- Valores NULL y IS NULL
- Agregando datos con GROUP BY
- Cláusula HAVING
Módulo 5: Manipulación de datos
Módulo 6: Funciones avanzadas de SQL
Módulo 7: Subconsultas y consultas anidadas
- Introducción a subconsultas
- Subconsultas correlacionadas
- EXISTS y NOT EXISTS
- Usando subconsultas en cláusulas SELECT, FROM y WHERE
Módulo 8: Índices y optimización de rendimiento
- Entendiendo los índices
- Creación y gestión de índices
- Técnicas de optimización de consultas
- Análisis del rendimiento de consultas
Módulo 9: Transacciones y concurrencia
- Introducción a las transacciones
- Propiedades ACID
- Instrucciones de control de transacciones
- Manejo de concurrencia