Subqueries: Unterschied zwischen den Versionen
Aus FI-Wiki
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 8: | Zeile 8: | ||
In diesem Abschnitt werden '''skalare Subqueries''' anhand von Beispielen erklärt. | In diesem Abschnitt werden '''skalare Subqueries''' anhand von Beispielen erklärt. | ||
== Beispieltabellen == | == Beispieltabellen == | ||
| Zeile 42: | Zeile 40: | ||
| 105 || 2 || 300.00 | | 105 || 2 || 300.00 | ||
|} | |} | ||
== Skalare Subqueries == | == Skalare Subqueries == | ||
| Zeile 49: | Zeile 45: | ||
Skalare Subqueries liefern '''genau einen einzelnen Wert''' zurück | Skalare Subqueries liefern '''genau einen einzelnen Wert''' zurück | ||
(z. B. MAX, MIN, COUNT, AVG). | (z. B. MAX, MIN, COUNT, AVG). | ||
=== Skalare Subquery in der WHERE-Klausel === | === Skalare Subquery in der WHERE-Klausel === | ||
==== Kunde mit der höchsten Einzelbestellung === | ==== Kunde mit der höchsten Einzelbestellung ==== | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
SELECT name | SELECT name | ||
| Zeile 74: | Zeile 68: | ||
Die innere Subquery ermittelt den '''höchsten Bestellbetrag'''. | Die innere Subquery ermittelt den '''höchsten Bestellbetrag'''. | ||
==== Kunde mit der kleinsten Einzelbestellung === | ==== Kunde mit der kleinsten Einzelbestellung ==== | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
SELECT name | SELECT name | ||
| Zeile 94: | Zeile 87: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Kunde mit dem höchsten Gesamtbestellwert ==== | |||
==== Kunde mit dem höchsten Gesamtbestellwert === | |||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
SELECT name | SELECT name | ||
| Zeile 116: | Zeile 107: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Skalare Subquery in der SELECT-Klausel ==== | |||
=== Skalare Subquery in der SELECT-Klausel === | |||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
| Zeile 132: | Zeile 121: | ||
Diese Abfrage zeigt '''für jeden Kunden''' die Anzahl seiner Bestellungen. | Diese Abfrage zeigt '''für jeden Kunden''' die Anzahl seiner Bestellungen. | ||
==== Warum ist das eine korrelierte Subquery? === | ==== Warum ist das eine korrelierte Subquery? ==== | ||
* Die Subquery greift auf die äußere Tabelle zu: | * Die Subquery greift auf die äußere Tabelle zu: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
| Zeile 139: | Zeile 128: | ||
* Sie wird daher '''für jede Zeile der äußeren Abfrage neu ausgeführt''' | * Sie wird daher '''für jede Zeile der äußeren Abfrage neu ausgeführt''' | ||
=== Skalare Subquery in der HAVING-Klausel === | === Skalare Subquery in der HAVING-Klausel === | ||
| Zeile 154: | Zeile 142: | ||
Gibt alle Kunden zurück, deren '''Bestellsumme über dem Durchschnitt''' liegt. | Gibt alle Kunden zurück, deren '''Bestellsumme über dem Durchschnitt''' liegt. | ||
=== Zusammenfassung === | === Zusammenfassung === | ||
| Zeile 162: | Zeile 148: | ||
* Sie können in '''WHERE''', '''SELECT''' und '''HAVING''' verwendet werden | * Sie können in '''WHERE''', '''SELECT''' und '''HAVING''' verwendet werden | ||
* Korrelierte Subqueries beziehen sich auf die äußere Abfrage und laufen zeilenweise | * Korrelierte Subqueries beziehen sich auf die äußere Abfrage und laufen zeilenweise | ||
[[Kategorie:Datenbanken]] | [[Kategorie:Datenbanken]] | ||
[[Kategorie:Semester2]] | [[Kategorie:Semester2]] | ||
Version vom 11. Januar 2026, 12:17 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
