Skip to content

Montag, 2026-01-26_Datenbanken_KNO

Subqueries (Unterabfragen)

  • Eine Subquery ist eine SQL-Abfrage, die innerhalb einer anderen Abfrage verwendet wird.
  • Sie dient dazu, komplexe Fragestellungen in mehrere logisch aufeinanderfolgende Schritte zu zerlegen.
  • Subqueries können – abhängig vom Kontext – unterschiedliche Ergebnistypen liefern:
  • Skalar (ein einzelner Wert)
  • Liste (eine Spalte mit mehreren Werten)
  • Tabelle (mehrere Spalten und Zeilen)

Verwendung von Subqueries in SQL-Klauseln

  • SELECT erwartet:
  • Skalar (z. B. Aggregat oder Berechnung)
  • Liste
  • Tabelle
  • WHERE erwartet:
  • Skalar
  • Liste (z. B. mit IN)
  • Tabelle (z. B. mit EXISTS)
  • FROM erwartet:
  • Tabelle
  • HAVING erwartet:
  • Skalar
  • Liste
  • JOIN erwartet:
  • Tabelle
  • INSERT erwartet:
  • Tabelle
  • UPDATE erwartet:
  • Skalar
  • DELETE erwartet:
  • Skalar
  • CREATE TABLE erwartet:
  • Tabelle
  • WITH ... AS (SELECT ...) (Common Table Expression, CTE) erwartet:
  • Tabelle

Beispiel: Common Table Expression (CTE)

WITH dept_count AS (
    SELECT department_id, COUNT(*) AS emp_count
    FROM employees
    GROUP BY department_id
)
SELECT *
FROM dept_count
WHERE emp_count > 10;

Beispiele für Subqueries

Skalare Subquery (Einzelwert)

SELECT name
FROM employees
WHERE department_id = (
    SELECT id
    FROM departments
    WHERE name = 'Sales'
);

Subquery mit Liste (IN)

SELECT name
FROM employees
WHERE department_id IN (
    SELECT id
    FROM departments
    WHERE location = 'New York'
);

Subquery mit Aggregatfunktion

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Korrelierte Subquery (Bezug auf äußere Abfrage)

SELECT name,
       (SELECT COUNT(*)
        FROM orders
        WHERE orders.employee_id = employees.id) AS order_count
FROM employees;

Weitere Eigenschaften von Subqueries

  • Subqueries können selbst weitere Subqueries enthalten (Verschachtelung).
  • Sie können als Ausdruck, Filter oder Datenquelle eingesetzt werden.
  • Korrelierte Subqueries werden für jede Zeile der äußeren Abfrage erneut ausgewertet.

Performance und Best Practices

  • Subqueries können die Performance negativ beeinflussen, wenn sie ungünstig eingesetzt werden.
  • Wichtige Optimierungsmaßnahmen:
  • Vermeidung unnötiger Subqueries
  • Verwendung von JOINs, wenn sie funktional gleichwertig und effizienter sind
  • Einsatz von Indizes auf beteiligten Spalten
  • Nutzung von CTEs (WITH) zur besseren Lesbarkeit und Wartbarkeit
  • Analyse der Ausführungspläne (Query Execution Plans)
  • Vergleich von Abfragen mit und ohne Subqueries
  • Gezielter Einsatz von EXISTS oder IN, abhängig vom Anwendungsfall