Korrelierte Unterabfragen

Korrelierte Unterabfragen sind nicht eigenständig, sondern verweisen auf Spalten in der übergeordneten Abfrage.

Beispielsweise kann die Abfrage zum Suchen aller Filialen, in denen der Umsatz von Milchprodukten 10 Prozent des Gesamtumsatzes überschreitet, wie folgt in SQL geschrieben werden:
SELECT StoreID FROM Stores S
WHERE S.TotalSales*0.1 <
(SELECT SUM(1.Price) FROM Item i
WHERE S.StoreID = I.StoreId and I.ItemType = "Dairy");

Diese Abfrage ist eine korrelierte Unterabfrage, weil die innere Abfrage die äußere Spalte 'StoreID' aus der Tabelle 'Stores' in der übergeordneten Abfrage zum Berechnen der Gesamtumsatzes für Milchprodukte in bestimmten Filialen verwendet.

In vielen Fällen können Sie korrelierte Abfragen auch als Joins schreiben. Sie können z. B. das Beispiel neu schreiben, indem Sie einen Join zwischen der Tabelle 'Stores' und einer Tabellenunterabfrage für 'Items' verwenden.
SELECT S.StoreId FROM Stores S,
(SELECT I.StoreId, Sum(Price) DairySales FROM Items I
WHERE I.ItemType = "Dairy" GROUP BY I.StoreId) D
WHERE S.StoreId = D.StoreId AND S.TotalSales *0.1 < D.DairySales;

In dieser Version erstellt die Unterabfrage eine Ergebnistabelle als Teil der äußeren FROM-Klausel, die dann mit der Tabelle 'Stores' verknüpft wird, damit der Milchproduktumsatz getestet werden kann.