Articles

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:

SQL-korrelierte Unterabfrage: Employees Table

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);
SQL-Unterabfrage Beispiel

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:

Beispiel für eine korrelierte SQL-Unterabfrage

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:

SQL-korrelierte Unterabfrage in der SELECT-Klausel

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:

SQL-korrelierte Unterabfrage mit EXISTS-Operator

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