SQL-korrelierte Unterabfrage
Zusammenfassung: In diesem Lernprogramm erfahren Sie mehr über die SQL-korrelierte Unterabfrage, bei der es sich um eine Unterabfrage handelt, die Werte aus der äußeren Abfrage verwendet.
Einführung in die korrelierte SQL-Unterabfrage
Beginnen wir mit einem Beispiel.
Siehe die folgende employees
Tabelle in der Beispieldatenbank:
Die folgende Abfrage findet Mitarbeiter, deren Gehalt höher ist als das Durchschnittsgehalt aller Mitarbeiter:
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
In diesem Beispiel wird die Unterabfrage in der WHERE
-Klausel verwendet. Es gibt einige Punkte, die Sie aus dieser Abfrage sehen können:
Zunächst können Sie die Unterabfrage ausführen, die das Durchschnittsgehalt aller Mitarbeiter unabhängig voneinander zurückgibt.
SELECT AVG(salary)FROM employees;
Zweitens muss das Datenbanksystem die Unterabfrage nur einmal auswerten.
Drittens verwendet die äußere Abfrage das von der Unterabfrage zurückgegebene Ergebnis. Die äußere Abfrage hängt von der Unterabfrage für ihren Wert ab. Die Unterabfrage hängt jedoch nicht von der äußeren Abfrage ab. Manchmal nennen wir diese Unterabfrage eine einfache Unterabfrage.
Im Gegensatz zu einer einfachen Unterabfrage ist eine korrelierte Unterabfrage eine Unterabfrage, die die Werte aus der äußeren Abfrage verwendet. Außerdem kann eine korrelierte Unterabfrage einmal für jede von der äußeren Abfrage ausgewählte Zeile ausgewertet werden. Aus diesem Grund kann eine Abfrage, die eine korrelierte Unterabfrage verwendet, langsam sein.
Eine korrelierte Unterabfrage wird auch als sich wiederholende Unterabfrage oder synchronisierte Unterabfrage bezeichnet.
Beispiele für korrelierte SQL-Unterabfragen
Sehen wir uns einige weitere Beispiele der korrelierten Unterabfragen an, um sie besser zu verstehen.
SQL-korrelierte Unterabfrage im WHERE-Klausel-Beispiel
Die folgende Abfrage findet alle Mitarbeiter, deren Gehalt höher ist als das Durchschnittsgehalt der Mitarbeiter in ihren Abteilungen:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)ORDER BY department_id , first_name , last_name;
Hier ist die Ausgabe:
In diesem Beispiel lautet die äußere Abfrage:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
und die korrelierte Unterabfrage lautet:
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
Für jeden Mitarbeiter muss das Datenbanksystem die korrelierte Unterabfrage einmal ausführen, um das Durchschnittsgehalt der Mitarbeiter in der Abteilung des aktuellen Mitarbeiters zu berechnen.
SQL-korrelierte Unterabfrage in der SELECT-Klausel Beispiel
Die folgende Abfrage gibt die Mitarbeiter und das Durchschnittsgehalt aller Mitarbeiter in ihren Abteilungen zurück:
SELECT employee_id, first_name, last_name, department_name, salary, (SELECT ROUND(AVG(salary),0) FROM employees WHERE department_id = e.department_id) avg_salary_in_departmentFROM employees e INNER JOIN departments d ON d.department_id = e.department_idORDER BY department_name, first_name, last_name;
Die Ausgabe lautet:
Für jeden Mitarbeiter muss das Datenbanksystem die korrelierte Unterabfrage einmal ausführen, um das Durchschnittsgehalt der Abteilung des Mitarbeiters zu berechnen.
SQL korrelierte Unterabfrage mit EXISTS Operator Beispiel
Wir verwenden oft eine korrelierte Unterabfrage mit dem EXISTS
Operator. Die folgende Abfrage gibt beispielsweise alle Mitarbeiter zurück, die keine Angehörigen haben:
SELECT employee_id, first_name, last_nameFROM employees eWHERE NOT EXISTS( SELECT * FROM dependents d WHERE d.employee_id = e.employee_id)ORDER BY first_name , last_name;
Das folgende Bild zeigt die Ausgabe:
In diesem Lernprogramm haben Sie die SQL-korrelierte Unterabfrage kennengelernt und erfahren, wie Sie sie anwenden, um eine komplexe Abfrage zu erstellen.
- War dieses Tutorial hilfreich ?
- JaNein
Leave a Reply