In SQL ist eine korrelierte Unterabfrage eine Unterabfrage, die auf eine Spalte aus der äußeren Abfrage verweist. Die Unterabfrage wird wiederholt für jede Zeile der äußeren Abfrage ausgeführt, wobei die Werte aus der aktuellen Zeile zum Ausführen der Unterabfrage verwendet werden. Das Ergebnis der Unterabfrage wird dann bei der Auswertung der äußeren Abfrage verwendet.
Für die zeilenweise Verarbeitung werden korrelierte Unterabfragen verwendet. Jede Unterabfrage wird einmal für jede Zeile der äußeren Abfrage ausgeführt.
Eine korrelierte Unterabfrage wird einmal für jede von der übergeordneten Anweisung verarbeitete Zeile ausgewertet. Die übergeordnete Anweisung kann a sein WÄHLEN , AKTUALISIEREN , oder LÖSCHEN Stellungnahme.
Syntax:
SELECT Spalte1, Spalte2, ….
VON Tabelle1 außen
WHERE-Spalte1-Operator
(SELECT Spalte1, Spalte2
VON Tabelle2
WO expr1 =
äußerer.expr2);
Eine korrelierte Unterabfrage ist eine Möglichkeit, jede Zeile in einer Tabelle zu lesen und die Werte in jeder Zeile mit zugehörigen Daten zu vergleichen. Es wird immer dann verwendet, wenn eine Unterabfrage für jede von der Hauptabfrage berücksichtigte Kandidatenzeile ein anderes Ergebnis oder einen anderen Ergebnissatz zurückgeben muss. Mit anderen Worten: Sie können eine korrelierte Unterabfrage verwenden, um eine mehrteilige Frage zu beantworten, deren Antwort vom Wert in jeder Zeile abhängt, die von der übergeordneten Anweisung verarbeitet wird.
Verschachtelte Unterabfragen im Vergleich zu korrelierten Unterabfragen
Bei einer normalen verschachtelten Unterabfrage ist die innere WÄHLEN Die Abfrage wird zuerst und einmal ausgeführt und gibt Werte zurück, die von der Hauptabfrage verwendet werden sollen. Eine korrelierte Unterabfrage wird jedoch einmal für jede Kandidatenzeile ausgeführt, die von der äußeren Abfrage berücksichtigt wird. Mit anderen Worten: Die innere Abfrage wird von der äußeren Abfrage gesteuert.
NOTIZ: Sie können auch die verwenden BELIEBIG Und ALLE Operator in einer korrelierten Unterabfrage. BEISPIEL für korrelierte Unterabfragen: Finden Sie alle Mitarbeiter, die in ihrer Abteilung mehr als das Durchschnittsgehalt verdienen.
Abfrage:
SELECT last_name, salary, department_id FROM employees outer WHERE salary>(SELECT AVG(Gehalt) FROM Mitarbeiter WHERE Abteilungs-ID = äußere.Abteilungs-ID-Gruppe nach Abteilungs-ID);>
Eine andere Verwendung der Korrelation ist in AKTUALISIEREN Und LÖSCHEN
ZUGEHÖRIGES UPDATE
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Verwenden Sie eine korrelierte Unterabfrage, um Zeilen in einer Tabelle basierend auf Zeilen aus einer anderen Tabelle zu aktualisieren.
Korrelierte Löschung
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Verwenden Sie eine korrelierte Unterabfrage, um Zeilen in einer Tabelle basierend auf den Zeilen aus einer anderen Tabelle zu löschen.
gesperrte Nummern
Verwendung des EXISTS-Operators
Der EXISTS-Operator prüft, ob Zeilen in der Ergebnismenge der Unterabfrage vorhanden sind. Wenn ein Unterabfragezeilenwert gefunden wird, wird die Bedingung markiert WAHR und die Suche wird in der inneren Abfrage nicht fortgesetzt. Wenn sie nicht gefunden wird, wird die Bedingung markiert FALSCH und die Suche wird in der inneren Abfrage fortgesetzt.
BEISPIEL für die Verwendung des EXIST-Operators:
Finden Sie Mitarbeiter, denen mindestens eine Person unterstellt ist.
Abfrage:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>
AUSGABE :

BEISPIEL für die Verwendung des NOT EXIST-Operators
Finden Sie alle Abteilungen, die keine Mitarbeiter haben.
Abfrage:
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>
AUSGABE :

Häufig gestellte Fragen zu SQL-korrelierten Unterabfragen – FAQs
Was ist der Unterschied zwischen korrelierten Unterabfragen und regulären Unterabfragen?
Reguläre Unterabfragen (nicht korreliert) sind unabhängig von der äußeren Abfrage und werden nur einmal ausgewertet, bevor die Hauptabfrage ausgeführt wird. Im Gegensatz dazu sind korrelierte Unterabfragen von der äußeren Abfrage abhängig und werden für jede Zeile der Hauptabfrage ausgeführt.
Wann sollte ich korrelierte Unterabfragen verwenden?
Korrelierte Unterabfragen sind nützlich, wenn Sie das Ergebnis der äußeren Abfrage basierend auf einer Bedingung filtern müssen, die einen Verweis auf Werte aus der äußeren Abfrage selbst erfordert. Sie werden häufig in Szenarien verwendet, in denen die Bedingung auf Daten aus zugehörigen Tabellen basiert.