sql / intermediate
Snippet
Optimierung von Subquery-Filterungen mit dem EXISTS-Operator
Der EXISTS-Operator führt eine Short-Circuit-Auswertung durch und gibt sofort TRUE zurück, sobald die Query-Engine einen einzelnen passenden Datensatz in der Unterabfrage findet. Dies ist bei großen Datenmengen wesentlich effizienter als die Verwendung von IN mit Subqueries.
snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
SELECTc.customer_id,c.company_nameFROM customers cWHERE EXISTS (SELECT 1FROM orders oWHERE o.customer_id = c.customer_idAND o.order_status = 'COMPLETED');
Erklärung
1
FROM customers c
Weist der äußeren Tabelle einen Alias zu, um eine Korrelation in der Unterabfrage zu ermöglichen.
2
WHERE EXISTS (
Ermittelt den Wahrheitswert basierend auf frühzeitigem Treffer, ohne vollständige Ergebnissets aufzubauen.
3
SELECT 1
Gibt einen konstanten Skalarwert zurück, da EXISTS nur das Vorhandensein von Zeilen prüft.
4
WHERE o.customer_id = c.customer_id
Korreliert jede äußere Kundenzeile mit passenden Auftragsdatensätzen.