Subqueries: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''Subqueries''' (Unterabfragen) sind SQL-Abfragen, die innerhalb einer anderen Abfrage eingebettet sind.   
'''Subqueries''' (Unterabfragen) sind [[SQL]]-Abfragen, die innerhalb einer anderen Abfrage eingebettet sind.   
Sie liefern Zwischenergebnisse, die von der äußeren Abfrage weiterverarbeitet werden.
Sie liefern Zwischenergebnisse, die von der äußeren Abfrage weiterverarbeitet werden.



Version vom 11. Januar 2026, 12:18 Uhr

Subqueries (Unterabfragen) sind SQL-Abfragen, die innerhalb einer anderen Abfrage eingebettet sind. Sie liefern Zwischenergebnisse, die von der äußeren Abfrage weiterverarbeitet werden.

Arten von Subqueries

  • Skalare Subquery – liefert genau einen Wert zurück
  • Mehrzeilige Subquery – liefert mehrere Werte (z. B. für IN)
  • Korrelierte Subquery – bezieht sich auf die aktuelle Zeile der äußeren Abfrage

In diesem Abschnitt werden skalare Subqueries anhand von Beispielen erklärt.

Beispieltabellen

Tabelle: kunde

kundennr name land
1 Anna Deutschland
2 Ben Deutschland
3 Clara Österreich
4 David Schweiz
5 Eva Deutschland

Tabelle: bestellung

bestellnr kundennr betrag
101 1 900.00
102 2 1500.00
103 3 500.00
104 4 2200.00
105 2 300.00

Skalare Subqueries

Skalare Subqueries liefern genau einen einzelnen Wert zurück (z. B. MAX, MIN, COUNT, AVG).

Skalare Subquery in der WHERE-Klausel

Kunde mit der höchsten Einzelbestellung

SELECT name
FROM kunde
WHERE kundennr = (
    SELECT kundennr
    FROM bestellung
    WHERE betrag = (SELECT MAX(betrag) FROM bestellung)
);

Ergebnis:

name
------
David

Die innere Subquery ermittelt den höchsten Bestellbetrag.


Kunde mit der kleinsten Einzelbestellung

SELECT name
FROM kunde
WHERE kundennr = (
    SELECT kundennr
    FROM bestellung
    WHERE betrag = (SELECT MIN(betrag) FROM bestellung)
);

Ergebnis:

name
------
Ben

Kunde mit dem höchsten Gesamtbestellwert

SELECT name
FROM kunde
WHERE kundennr = (
    SELECT kundennr
    FROM bestellung
    GROUP BY kundennr
    ORDER BY SUM(betrag) DESC
    LIMIT 1
);

Ergebnis:

name
------
Ben

Skalare Subquery in der SELECT-Klausel

SELECT name,
(
    SELECT COUNT(*)
    FROM bestellung
    WHERE bestellung.kundennr = kunde.kundennr
) AS anzahl_bestellungen
FROM kunde;

Diese Abfrage zeigt für jeden Kunden die Anzahl seiner Bestellungen.

Warum ist das eine korrelierte Subquery?

  • Die Subquery greift auf die äußere Tabelle zu:
bestellung.kundennr = kunde.kundennr
  • Sie wird daher für jede Zeile der äußeren Abfrage neu ausgeführt


Skalare Subquery in der HAVING-Klausel

SELECT kundennr
FROM bestellung
GROUP BY kundennr
HAVING SUM(betrag) > (
    SELECT AVG(betrag)
    FROM bestellung
);

Gibt alle Kunden zurück, deren Bestellsumme über dem Durchschnitt liegt.

Zusammenfassung

  • Subqueries sind Abfragen innerhalb von Abfragen
  • Skalare Subqueries liefern genau einen Wert
  • Sie können in WHERE, SELECT und HAVING verwendet werden
  • Korrelierte Subqueries beziehen sich auf die äußere Abfrage und laufen zeilenweise