Skip to content

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

EmployeeIDLastNameFirstName
1DavolioNancy
2FullerAndrew
3LeverlingJanet
4PeacockMargaret

Tabla Orders

OrderIDOrderDateEmployeeID
102481996-07-041
102491996-07-052
102501996-07-083
102511996-07-083

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 table
WHERE 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, FirstName
FROM Employees
WHERE 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:

LastNameFirstName
PeacockMargaret

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 table1
WHERE 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, FirstName
FROM Employees
WHERE 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:

LastNameFirstName
DavolioNancy
FullerAndrew
LeverlingJanet

Referencias