Ricerca…


Osservazioni

Le sottoquery possono apparire in diverse clausole di una query esterna o nell'operazione set.

Devono essere racchiusi tra parentesi () . Se il risultato della sottoquery viene confrontato con qualcos'altro, il numero di colonne deve corrispondere. Gli alias di tabella sono necessari per le sottoquery nella clausola FROM per denominare la tabella temporanea.

Sottoquery nella clausola WHERE

Utilizzare una sottoquery per filtrare il set di risultati. Ad esempio, questo restituirà tutti i dipendenti con uno stipendio pari all'impiegato più pagato.

SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)

Sottoquery nella clausola FROM

Una sottoquery in una clausola FROM agisce in modo simile a una tabella temporanea generata durante l'esecuzione di una query e successivamente persa.

SELECT Managers.Id, Employees.Salary
FROM (
  SELECT Id
  FROM Employees
  WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id

Sottoquery nella clausola SELECT

SELECT
  Id, 
  FName, 
  LName,
  (SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers

Sottoquery nella clausola FROM

È possibile utilizzare le sottoquery per definire una tabella temporanea e utilizzarla nella clausola FROM di una query "esterna".

SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;

Quanto sopra trova le città dalla tabella del tempo la cui variazione di temperatura giornaliera è maggiore di 20. Il risultato è:

città temp_var
ST. LOUIS 21
LOS ANGELES 31
LOS ANGELES 23
LOS ANGELES 31
LOS ANGELES 27
LOS ANGELES 28
LOS ANGELES 28
LOS ANGELES 32

.

Sottoquery nella clausola WHERE

L'esempio seguente trova le città (dall'esempio delle città ) la cui popolazione è inferiore alla temperatura media (ottenuta tramite una subquery):

SELECT name, pop2000 FROM cities 
WHERE pop2000 < (SELECT avg(pop2000)  FROM cities);

Qui: la sottoquery (SELECT avg (pop2000) FROM cities) viene utilizzata per specificare le condizioni nella clausola WHERE. Il risultato è:

nome pop2000
San Francisco 776.733
ST. LOUIS 348.189
Kansas City 146.866

Sottoquery nella clausola SELECT

Le sottoquery possono anche essere utilizzate nella parte SELECT della query esterna. La seguente query mostra tutte le colonne della tabella meteo con gli stati corrispondenti dalla tabella delle città .

SELECT w.*,  (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state 
FROM weather AS w;

Filtra i risultati della query utilizzando la query su una tabella diversa

Questa query seleziona tutti i dipendenti non presenti nella tabella Supervisori.

SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
                            FROM Supervisors)

Gli stessi risultati possono essere ottenuti usando un SINISTRA SINISTRA.

SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL

Subquery correlate

Le sottoquery correlate (note anche come sincronizzate o coordinate) sono query nidificate che fanno riferimento alla riga corrente della query esterna:

SELECT EmployeeId
    FROM Employee AS eOuter
    WHERE Salary > (
       SELECT AVG(Salary)
       FROM Employee eInner
       WHERE eInner.DepartmentId = eOuter.DepartmentId
    )

Subquery SELECT AVG(Salary) ... è correlato perché fa riferimento alla riga Employee eOuter dalla sua query esterna.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow