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);OPERATORpuede ser cualquier operador de comparación como=,<,>,<=,>=,<>.t1yt2son alias paratable1ytable2, 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
NameySalaryde la tablaEmployeescon 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 tablaEmployeescon aliase2. - La condición
WHERE e1.DepartmentID = e2.DepartmentIDasegura 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
SalespersonIDyAmountde la tablaSalescon 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 tablaSalescon aliass2. - La condición
WHERE s1.ProductID = s2.ProductIDasegura 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
