Suche…


Bemerkungen

Unterabfragen können in verschiedenen Klauseln einer äußeren Abfrage oder in der Setoperation erscheinen.

Sie müssen in Klammern () . Wenn das Ergebnis der Unterabfrage mit etwas anderem verglichen wird, muss die Anzahl der Spalten übereinstimmen. Tabellenaliasnamen sind für Unterabfragen in der FROM-Klausel erforderlich, um die temporäre Tabelle zu benennen.

Unterabfrage in WHERE-Klausel

Verwenden Sie eine Unterabfrage, um die Ergebnismenge zu filtern. Zum Beispiel werden alle Mitarbeiter mit einem Gehalt entlohnt, das dem bestbezahlten Mitarbeiter entspricht.

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

Unterabfrage in FROM-Klausel

Eine Unterabfrage in einer FROM Klausel verhält sich ähnlich wie eine temporäre Tabelle, die während der Ausführung einer Abfrage generiert wird und danach verloren geht.

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

Unterabfrage in SELECT-Klausel

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

Unterabfragen in FROM-Klausel

Sie können Unterabfragen verwenden, um eine temporäre Tabelle zu definieren und in der FROM-Klausel einer "äußeren" Abfrage zu verwenden.

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

Oben werden Städte aus der Wettertabelle gefunden, deren tägliche Temperaturschwankung größer als 20 ist. Das Ergebnis ist:

Stadt 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

.

Unterabfragen in der WHERE-Klausel

Im folgenden Beispiel werden Städte (aus dem Beispiel für Städte ) gefunden, deren Bevölkerung unter der Durchschnittstemperatur liegt (über eine Unterabfrage ermittelt):

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

Hier: Mit der Unterabfrage (SELECT avg (pop2000) FROM cities) werden Bedingungen in der WHERE-Klausel angegeben. Das Ergebnis ist:

Name pop2000
San Francisco 776733
ST LOUIS 348189
Kansas City 146866

Unterabfragen in SELECT-Klausel

Unterabfragen können auch im SELECT Teil der äußeren Abfrage verwendet werden. Die folgende Abfrage zeigt alle Wettertabellenspalten mit den entsprechenden Bundesländern aus der Städtetabelle .

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

Filtern Sie die Abfrageergebnisse mithilfe der Abfrage in einer anderen Tabelle

Diese Abfrage wählt alle Mitarbeiter aus, die sich nicht in der Supervisors-Tabelle befinden.

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

Die gleichen Ergebnisse können mit einem LEFT JOIN erzielt werden.

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

Korrelierte Unterabfragen

Korrelierte (auch als synchronisierte oder koordinierte) Unterabfragen bezeichnet verschachtelte Abfragen, die auf die aktuelle Zeile ihrer äußeren Abfrage verweisen:

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

Die Unterabfrage SELECT AVG(Salary) ... ist korreliert, da sie von ihrer äußeren Abfrage auf die Employee eOuter verweist.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow