Subqueries: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Zeile 46: Zeile 46:
=== Skalare Subqueries in der WHERE-Klausel ===
=== Skalare Subqueries in der WHERE-Klausel ===


Gibt den Namen des Kunden mit der höchsten Bestellung zurück.


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Zeile 65: Zeile 66:
</syntaxhighlight>
</syntaxhighlight>


Gibt den Namen des Kunden mit der höchsten Bestellung zurück.
Gibt den Namen des Kunden mit der kleinsten Bestellung zurück.
 
<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
SELECT name
SELECT name
Zeile 81: Zeile 83:
</syntaxhighlight>
</syntaxhighlight>


Gibt den Namen des Kunden mit der kleinsten Bestellung zurück.
Gibt den Namen des Kunden mit dem höchsten Gesamtbestellwert zurück.


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
Zeile 100: Zeile 102:
Ben
Ben
</syntaxhighlight>
</syntaxhighlight>
Gibt den Namen des Kunden mit dem höchsten Gesamtbestellwert zurück.


==== Skalare Subquery in der SELECT-Klausel ====
=== Skalare Subquery in der SELECT-Klausel ===
Zeigt zu jedem Kunden die Anzahl seiner Bestellungen an.


<syntaxhighlight lang="sql">  
<syntaxhighlight lang="sql">  
Zeile 113: Zeile 115:
</syntaxhighlight>
</syntaxhighlight>


Zeigt zu jedem Kunden die Anzahl seiner Bestellungen an.
Die Subquery ist:
Die Subquery ist:


Zeile 126: Zeile 127:
Dadurch wird sie für jede Zeile der äußeren Abfrage erneut ausgeführt.
Dadurch wird sie für jede Zeile der äußeren Abfrage erneut ausgeführt.


==== Skalare Subquery in der HAVING-Klausel ====
=== Skalare Subquery in der HAVING-Klausel ===


<syntaxhighlight lang="sql"> SELECT kundennr FROM bestellung GROUP BY kundennr HAVING SUM(betrag) > ( SELECT AVG(betrag) FROM bestellung ); </syntaxhighlight>
<syntaxhighlight lang="sql"> SELECT kundennr FROM bestellung GROUP BY kundennr HAVING SUM(betrag) > ( SELECT AVG(betrag) FROM bestellung ); </syntaxhighlight>

Version vom 11. Januar 2026, 12:05 Uhr

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

Arten von Subqueries

  • Skalare Subquery: Gibt genau einen Wert zurück
  • Mehrzeilige Subquery: Gibt eine Liste von Werten zurück
  • Korrelierte Subquery: Bezieht sich auf eine Tabelle der äußeren Abfrage

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 in der WHERE-Klausel

Gibt den Namen des Kunden mit der höchsten Bestellung zurück.

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

Ergebnis:

name
------
David

Gibt den Namen des Kunden mit der kleinsten Bestellung zurück.

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

Gibt den Namen des Kunden mit dem höchsten Gesamtbestellwert zurück.

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

Skalare Subquery in der SELECT-Klausel

Zeigt zu jedem Kunden die Anzahl seiner Bestellungen an.

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

Die Subquery ist:

Skalare Subquery: Sie liefert genau einen Wert zurück, da die Funktion COUNT(*) immer eine einzelne Zahl ergibt.

Korrelierte Subquery: Die Subquery bezieht sich auf die äußere Tabelle:

WHERE bestellung.kundennr = kunde.kundennr

Dadurch wird sie für jede Zeile der äußeren Abfrage erneut ausgeführt.

Skalare Subquery in der HAVING-Klausel

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

Gibt Kunden-IDs zurück, deren Bestellsumme über dem durchschnittlichen Bestellwert liegt.