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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow