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 y t2 son alias para table1 y table2, 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

  1. Consulta Externa:

    SELECT Name, Salary
    FROM Employees AS e1
    WHERE Salary > ...
    
    • Selecciona el Name y Salary de la tabla Employees con alias e1.
  2. Subconsulta Correlacionada:

    (SELECT AVG(Salary)
     FROM Employees AS e2
     WHERE e1.DepartmentID = e2.DepartmentID)
    
    • Calcula el salario promedio (AVG(Salary)) de la tabla Employees con alias e2.
    • 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.

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

  1. Consulta Externa:

    SELECT SalespersonID, Amount
    FROM Sales AS s1
    WHERE Amount > ...
    
    • Selecciona el SalespersonID y Amount de la tabla Sales con alias s1.
  2. Subconsulta Correlacionada:

    (SELECT AVG(Amount)
     FROM Sales AS s2
     WHERE s1.ProductID = s2.ProductID)
    
    • Calcula el monto promedio (AVG(Amount)) de la tabla Sales con alias s2.
    • 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.

Errores Comunes

  1. No correlacionar correctamente la subconsulta: Asegúrate de que la subconsulta se refiere a la columna correcta de la consulta externa.
  2. Uso incorrecto de alias: Utiliza alias claros y consistentes para evitar confusiones.
  3. 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

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2024. Todos los derechos reservados