Subqueries: Unterschied zwischen den Versionen
Aus FI-Wiki
Keine Bearbeitungszusammenfassung |
|||
| Zeile 128: | Zeile 128: | ||
* Ist unabhängig von der äußeren Abfrage. | * Ist unabhängig von der äußeren Abfrage. | ||
''Korrelierte Subquery:''' | '''Korrelierte Subquery:''' | ||
* Wird für jede Zeile der äußeren Abfrage neu ausgeführt. | * Wird für jede Zeile der äußeren Abfrage neu ausgeführt. | ||
Version vom 29. Oktober 2025, 11:54 Uhr
Subqueries in SQL
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 |
1. Skalare Subquery
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 höchsten Bestellung zurück.
2. Mehrzeilige Subquery mit IN
SELECT name
FROM kunde
WHERE kundennr IN (
SELECT kundennr
FROM bestellung
WHERE betrag > 1000
);
Ergebnis:
name
------
Ben
David
Gibt alle Kunden zurück, die Bestellungen über 1000 haben.
3. Korrelierte Subquery
SELECT name
FROM kunde k
WHERE EXISTS (
SELECT *
FROM bestellung b
WHERE b.kundennr = k.kundennr AND b.betrag > 1000
);
Ergebnis:
name
------
Ben
David
Funktioniert zeilenweise: Gibt Kunden zurück, für die es mindestens eine große Bestellung gibt.
Vergleich der Subquery-Arten
- Skalare Subquery: 1 Zeile, 1 Spalte (z. B. MAX, COUNT)
- Mehrzeilige Subquery: mehrere Zeilen (z. B. für IN oder NOT IN)
- Korrelierte Subquery: wird für jede Zeile der äußeren Abfrage neu ausgeführt
Unterschied zwischen mehrzeiliger und korrelierter Subquery
Mehrzeilige Subquery:
- Wird einmal ausgeführt.
- Gibt eine Liste von Werten zurück.
- Wird typischerweise mit IN, ANY, ALL, NOT IN verwendet.
- Ist unabhängig von der äußeren Abfrage.
Korrelierte Subquery:
- Wird für jede Zeile der äußeren Abfrage neu ausgeführt.
- Nutzt eine Referenz auf die äußere Tabelle (z. B. k.kundennr).
- Typisch in Verbindung mit EXISTS oder auch IN, =, etc.
- Ist abhängig von der aktuellen Zeile der äußeren Abfrage.
Fazit
- Skalare Subquery: liefert genau einen Wert
- Mehrzeilige Subquery: liefert eine Liste von Werten
- Korrelierte Subquery: ist abhängig von der äußeren Zeile und flexibler, aber ggf. langsamer
