In manchen Situationen kann es erforderlich sein, einen bestimmten Spaltenwert mit einem maximalen oder minimalen Wert zu
vergleichen. Solche Abfragen werden oft in Form von verschachtelten Abfragen gebildet, die ein korreliertes Attribut enthalten
(auch als äußere Referenz bezeichnet). Im Beispiel der folgenden Abfrage werden alle Bestellungen einschließlich der Produktdaten
aufgeführt, bei denen der vorhandene Bestand nicht ausreicht, um die maximale Einzelbestellung für dieses Produkt zu erfüllen:
SELECT o.ID, o.OrderDate, p.*
FROM SalesOrders o, SalesOrderItems s, Products p
WHERE o.ID = s.ID AND s.ProductID = p.ID
AND p.Quantity < ( SELECT MAX( s2.Quantity )
FROM SalesOrderItems s2
WHERE s2.ProductID = p.ID )
ORDER BY p.ID, o.ID;
Der grafische Plan für diese Abfrage wird in der Plananzeige angezeigt, wie unten dargestellt. Beachten Sie, wie der Abfrageoptimierer
diese verschachtelte Abfrage in einen Join transformiert hat, der die Tabellen "Products" und "SalesOrders" mit einer abgeleiteten
Tabelle mit dem Korrelationsnamen DT verknüpft, in der eine Fensterfunktion enthalten ist.
Sie können solche Abfragen mit einer Fensterfunktion bilden, statt sich darauf zu verlassen, dass der Optimierer die korrelierte
Unterabfrage in einen Join mit einer abgeleiteten Tabelle transformiert, was wegen der Komplexität der semantischen Analyse
nur in einfachen Fällen möglich ist.
SELECT order_quantity.ID, o.OrderDate, p.*
FROM ( SELECT s.ID, s.ProductID,
MAX( s.Quantity ) OVER (
PARTITION BY s.ProductID
ORDER BY s.ProductID )
AS max_quantity
FROM SalesOrderItems s )
AS order_quantity, Products p, SalesOrders o
WHERE p.ID = ProductID
AND o.ID = order_quantity.ID
AND p.Quantity < max_quantity
ORDER BY p.ID, o.ID;