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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow