Sök…
Anmärkningar
Underfrågor kan visas i olika klausuler i en yttre fråga eller i den inställda åtgärden.
De måste bifogas inom parentes ()
. Om resultatet av underkursen jämförs med något annat måste antalet kolumner matcha. Tabellalias krävs för underfrågor i FROM-klausulen för att namnge den temporära tabellen.
Underfrågor i WHERE-klausulen
Använd en undersökning för att filtrera resultatuppsättningen. Till exempel kommer detta att returnera alla anställda med en lön som är lika med den högst betalda arbetstagaren.
SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)
Underfråga i FROM-klausulen
En underfråga i en FROM
klausul fungerar på samma sätt som en tillfällig tabell som genereras under körningen av en fråga och förloras efteråt.
SELECT Managers.Id, Employees.Salary
FROM (
SELECT Id
FROM Employees
WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id
Underfrågan i SELECT-klausulen
SELECT
Id,
FName,
LName,
(SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers
Underfrågor i FROM-klausulen
Du kan använda undersökningar för att definiera en tillfällig tabell och använda den i FROM-klausulen i en "yttre" fråga.
SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;
Ovanstående hittar städer från väderbordet vars dagliga temperaturvariation är större än 20. Resultatet är:
stad | 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 |
.
Underfrågor i WHERE-klausulen
Följande exempel hittar städer (från städerexemplet ) vars befolkning är under medeltemperaturen (erhålls via en undersökning):
SELECT name, pop2000 FROM cities
WHERE pop2000 < (SELECT avg(pop2000) FROM cities);
Här: subfrågan (SELECT avg (pop2000) FRÅN städer) används för att ange villkor i WHERE-klausulen. Resultatet är:
namn | pop2000 |
---|---|
San Francisco | 776.733 |
ST. LOUIS | 348.189 |
Kansas City | 146.866 |
Underfrågor i SELECT-klausulen
Underfrågor kan också användas i SELECT
delen av den yttre frågan. Följande fråga visar alla väder tabell kolumner med motsvarande stater från städerna tabellen .
SELECT w.*, (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state
FROM weather AS w;
Filtrera sökresultat med fråga i olika tabeller
Denna fråga väljer alla anställda som inte finns på övervakningstabellen.
SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
FROM Supervisors)
Samma resultat kan uppnås med hjälp av Vänster JOIN.
SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL
Korrelerade undersökningar
Korrelerade (även känd som synkroniserade eller samordnade) undersökningar är kapslade frågor som hänvisar till den aktuella raden i deras yttre fråga:
SELECT EmployeeId
FROM Employee AS eOuter
WHERE Salary > (
SELECT AVG(Salary)
FROM Employee eInner
WHERE eInner.DepartmentId = eOuter.DepartmentId
)
Underfråga SELECT AVG(Salary) ...
är korrelerade eftersom det hänvisar till Employee
eOuter
från dess yttre fråga.