Buscar..
Observaciones
Las subconsultas pueden aparecer en diferentes cláusulas de una consulta externa, o en la operación establecida.
Deben estar entre paréntesis ()
. Si el resultado de la subconsulta se compara con otra cosa, el número de columnas debe coincidir. Los alias de tabla son necesarios para las subconsultas en la cláusula FROM para nombrar la tabla temporal.
Subconsulta en la cláusula WHERE
Utilice una subconsulta para filtrar el conjunto de resultados. Por ejemplo, esto devolverá a todos los empleados con un salario igual al empleado mejor pagado.
SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)
Subconsulta en la cláusula FROM
Una subconsulta en una cláusula FROM
actúa de manera similar a una tabla temporal que se genera durante la ejecución de una consulta y se pierde después.
SELECT Managers.Id, Employees.Salary
FROM (
SELECT Id
FROM Employees
WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id
Subconsulta en cláusula SELECT
SELECT
Id,
FName,
LName,
(SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers
Subconsultas en la cláusula FROM
Puede usar subconsultas para definir una tabla temporal y usarla en la cláusula FROM de una consulta "externa".
SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;
Lo anterior encuentra ciudades de la tabla meteorológica cuya variación de temperatura diaria es superior a 20. El resultado es:
ciudad | temp_var |
---|---|
SAN LOUIS | 21 |
LOS ANGELES | 31 |
LOS ANGELES | 23 |
LOS ANGELES | 31 |
LOS ANGELES | 27 |
LOS ANGELES | 28 |
LOS ANGELES | 28 |
LOS ANGELES | 32 |
.
Subconsultas en la cláusula WHERE
El siguiente ejemplo encuentra ciudades (del ejemplo de ciudades ) cuya población está por debajo de la temperatura promedio (obtenida a través de una sub-consulta):
SELECT name, pop2000 FROM cities
WHERE pop2000 < (SELECT avg(pop2000) FROM cities);
Aquí: la subconsulta (SELECT avg (pop2000) FROM cities) se usa para especificar condiciones en la cláusula WHERE. El resultado es:
nombre | pop2000 |
---|---|
San Francisco | 776733 |
SAN LOUIS | 348189 |
ciudad de Kansas | 146866 |
Subconsultas en cláusula SELECT
Las subconsultas también se pueden utilizar en la parte SELECT
de la consulta externa. La siguiente consulta muestra todas las columnas de la tabla de clima con los estados correspondientes de la tabla de ciudades .
SELECT w.*, (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state
FROM weather AS w;
Filtrar resultados de consultas usando consultas en diferentes tablas.
Esta consulta selecciona a todos los empleados que no están en la tabla de Supervisores.
SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
FROM Supervisors)
Se pueden lograr los mismos resultados utilizando un IZQUIERDA.
SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL
Subconsultas correlacionadas
Las subconsultas correlacionadas (también conocidas como sincronizadas o coordinadas) son consultas anidadas que hacen referencias a la fila actual de su consulta externa:
SELECT EmployeeId
FROM Employee AS eOuter
WHERE Salary > (
SELECT AVG(Salary)
FROM Employee eInner
WHERE eInner.DepartmentId = eOuter.DepartmentId
)
La subconsulta SELECT AVG(Salary) ...
está correlacionada porque se refiere a la fila de Employee
eOuter
de su consulta externa.