Subqueries: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Zeile 65: Zeile 65:
Gibt den Namen des Kunden mit der höchsten Bestellung zurück.
Gibt den Namen des Kunden mit der höchsten Bestellung zurück.


=== 2. Mehrzeilige Subquery mit IN ===


<syntaxhighlight lang="sql">
SELECT name
FROM kunde
WHERE kundennr IN (
    SELECT kundennr
    FROM bestellung
    WHERE betrag > 1000
);
</syntaxhighlight>
'''Ergebnis:'''
<syntaxhighlight lang="text">
name
------
Ben
David
</syntaxhighlight>
Gibt alle Kunden zurück, die Bestellungen über 1000 haben.
=== 3. Korrelierte Subquery ===
<syntaxhighlight lang="sql">
SELECT name
FROM kunde k
WHERE EXISTS (
    SELECT *
    FROM bestellung b
    WHERE b.kundennr = k.kundennr AND b.betrag > 1000
);
</syntaxhighlight>
'''Ergebnis:'''
<syntaxhighlight lang="text">
name
------
Ben
David
</syntaxhighlight>
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


[[Kategorie:Datenbanken]]
[[Kategorie:Datenbanken]]
[[Kategorie:Semester2]]
[[Kategorie:Semester2]]

Version vom 29. Oktober 2025, 13:06 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.