Subconsultas
Una subconsulta es una consulta anidada dentro de otra consulta. Las subconsultas se utilizan para realizar una consulta más compleja y obtener resultados más específicos. Las subconsultas se pueden utilizar en la cláusula SELECT, FROM, WHERE, HAVING o INSERT de una consulta SQL.
En Microsoft SQL Server, las subconsultas se pueden clasificar en dos tipos: subconsultas correlacionadas y subconsultas no correlacionadas.
Manejaremos las siguientes tablas para facilitar la comprensión de las subconsultas:
Tabla Employees
| EmployeeID | LastName | FirstName |
|---|---|---|
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leverling | Janet |
| 4 | Peacock | Margaret |
Tabla Orders
| OrderID | OrderDate | EmployeeID |
|---|---|---|
| 10248 | 1996-07-04 | 1 |
| 10249 | 1996-07-05 | 2 |
| 10250 | 1996-07-08 | 3 |
| 10251 | 1996-07-08 | 3 |
Subconsultas no correlacionadas
Una subconsulta no correlacionada es una subconsulta que se puede ejecutar de forma independiente de la consulta principal. La subconsulta no correlacionada se ejecuta solo una vez y devuelve un solo valor o conjunto de valores que se utilizan en la consulta principal.
La sintaxis básica de una subconsulta no correlacionada es la siguiente:
SELECT column1, column2, ...FROM tableWHERE column_name operator (SELECT column_name FROM table WHERE condition);Por ejemplo, para seleccionar los empleados que tienen un EmployeeID mayor que 2, se puede utilizar la siguiente consulta:
SELECT LastName, FirstNameFROM EmployeesWHERE EmployeeID > (SELECT MAX(EmployeeID) FROM Employees);En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees donde el EmployeeID es mayor que el valor máximo de EmployeeID en la tabla Employees.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName |
|---|---|
| Peacock | Margaret |
Subconsultas correlacionadas
Una subconsulta correlacionada es una subconsulta que depende de la consulta principal para su ejecución. La subconsulta correlacionada se ejecuta una vez por cada fila de la consulta principal y se utiliza para filtrar los resultados de la consulta principal.
La sintaxis básica de una subconsulta correlacionada es la siguiente:
SELECT column1, column2, ...FROM table1WHERE condition (SELECT column_name FROM table2 WHERE table1.column_name = table2.column_name);Por ejemplo, para seleccionar los empleados que tienen al menos un pedido en la tabla Orders, se puede utilizar la siguiente consulta:
SELECT LastName, FirstNameFROM EmployeesWHERE EXISTS (SELECT * FROM Orders WHERE Employees.EmployeeID = Orders.EmployeeID);En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees donde existe al menos un pedido en la tabla Orders que coincide con el EmployeeID de la tabla Employees.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName |
|---|---|
| Davolio | Nancy |
| Fuller | Andrew |
| Leverling | Janet |
Referencias
- [Microsoft SQL Server - Subqueries](https://docs.microsoft.com/en-us/sql/t-sql
- [Microsoft SQL Server - EXISTS](https://docs.microsoft.com/en-us/sql/t-sql/language
- [Microsoft SQL Server - Subquery Fundamentals](https://docs.microsoft.com/en-us/sql/t-sql/language