JOIN vs. Subquery

Aus FI-Wiki
Version vom 29. April 2026, 05:53 Uhr von Moettke (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Dieser Artikel erklärt den Unterschied zwischen '''JOINs''' und '''Subqueries''' anhand einfacher Beispiele. == Grundprinzip == * '''JOIN''' → Tabellen werden miteinander '''verbunden''' * '''Subquery''' → Eine Abfrage wird '''innerhalb einer anderen Abfrage''' verwendet == Beispieltabellen == '''Tabelle: kunde''' {| class="wikitable" ! kundennr !! name |- | 1 || Anna |- | 2 || Ben |- | 3 || Clara |} '''Tabelle: bestellung''' {| class="wikitab…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Dieser Artikel erklärt den Unterschied zwischen JOINs und Subqueries anhand einfacher Beispiele.

Grundprinzip

  • JOIN → Tabellen werden miteinander verbunden
  • Subquery → Eine Abfrage wird innerhalb einer anderen Abfrage verwendet

Beispieltabellen

Tabelle: kunde

kundennr name
1 Anna
2 Ben
3 Clara

Tabelle: bestellung

bestellnr kundennr betrag
101 1 50
102 1 80
103 2 30

1. JOIN – Tabellen verbinden

Ziel: Bestellungen zusammen mit Kundennamen anzeigen

SELECT 
    k.name,
    b.bestellnr,
    b.betrag
FROM kunde k
JOIN bestellung b
    ON k.kundennr = b.kundennr;

Ergebnis:

name bestellnr betrag
Anna 101 50
Anna 102 80
Ben 103 30

Wichtig:

  • Ein Kunde kann mehrfach erscheinen
  • Grund: 1:n-Beziehung (ein Kunde → mehrere Bestellungen)

Merksatz: JOIN verbindet passende Zeilen aus mehreren Tabellen.

2. Subquery – Teilfrage stellen

Ziel: Kunden anzeigen, die mindestens eine Bestellung haben

SELECT name
FROM kunde
WHERE kundennr IN (
    SELECT kundennr
    FROM bestellung
);

Ergebnis:

name
Anna
Ben

Wichtig:

  • Clara erscheint nicht (keine Bestellung)
  • Die Subquery liefert eine Liste von Kundennummern

Merksatz: Subquery liefert ein Zwischenergebnis für die äußere Abfrage.

3. Gleiche Aufgabe – zwei Lösungen

Ziel: Kunden mit Bestellungen anzeigen

Mit Subquery

SELECT name
FROM kunde
WHERE kundennr IN (
    SELECT kundennr FROM bestellung
);

Mit JOIN

SELECT DISTINCT k.name
FROM kunde k
JOIN bestellung b
    ON k.kundennr = b.kundennr;

Hinweis:

  • DISTINCT ist notwendig, da ein Kunde mehrere Bestellungen haben kann

4. Subquery für Berechnungen

Ziel: Anzahl der Bestellungen pro Kunde

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

Ergebnis:

name anzahl_bestellungen
Anna 2
Ben 1
Clara 0

Eigenschaften:

  • skalare Subquery (liefert genau einen Wert)
  • korrelierte Subquery (bezieht sich auf äußere Abfrage)

5. Gleiche Aufgabe mit JOIN

SELECT 
    k.name,
    COUNT(b.bestellnr) AS anzahl_bestellungen
FROM kunde k
LEFT JOIN bestellung b
    ON k.kundennr = b.kundennr
GROUP BY k.kundennr, k.name;

Warum LEFT JOIN?

  • Damit auch Kunden ohne Bestellung angezeigt werden (z. B. Clara)

Warum GROUP BY?

  • Mehrere Bestellungen müssen zu einer Zeile zusammengefasst werden

6. Wann JOIN, wann Subquery?

Situation Empfehlung
Daten aus mehreren Tabellen anzeigen JOIN
Nur prüfen, ob Daten existieren Subquery (EXISTS / IN)
Vergleich mit Durchschnitt / Summe Subquery
Anzahl pro Datensatz berechnen beides möglich
Alle Datensätze behalten (auch ohne Treffer) LEFT JOIN

Fazit

JOIN

  • verbindet Tabellen
  • liefert kombinierte Daten

Subquery

  • beantwortet eine Teilfrage
  • wird innerhalb einer Abfrage verwendet

Wichtiger Merksatz: JOIN = Tabellen verbinden Subquery = Ergebnis einer Abfrage weiterverwenden