SQL JOIN
JOINs in SQL sind Befehle, um SQL Tabellen miteinander zu verbinden.
Mit JOINs kann man spezifische Verknüpfungen zwischen Tabellen herstellen, wie INNER JOIN, LEFT JOIN und RIGHT JOIN, die es ermöglichen, Daten gezielt auszuwählen und nur die relevanten Zeilen anzuzeigen.
Dies verbessert nicht nur die Lesbarkeit der Abfragen, sondern auch die Effizienz, da nur die notwendigen Daten verarbeitet werden.
Durch die Verwendung von JOINs wird die Datenbankabfrage klar strukturiert, was die Wartung und das Verständnis der Abfragen erleichtert.
JOIN-Typen Übersicht:
Tabelle A Tabelle B
┌────────┐ ┌────────┐
│ A │ │ B │
└────────┘ └────────┘
│ │
└────────┬─────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼─────┐
│ INNER │ │ LEFT │ │ RIGHT │
│ JOIN │ │ JOIN │ │ JOIN │
└─────────┘ └────────┘ └─────────┘
Visuelle Darstellung - INNER JOIN:
Tabelle A: Schueler Tabelle B: Kurse
┌────┬─────────┐ ┌────┬──────────┐
│ ID │ Name │ │ ID │ Kursname │
├────┼─────────┤ ├────┼──────────┤
│ 1 │ Max │ │ 1 │ Math │
│ 2 │ Anna │ │ 2 │ Deutsch │
└────┴─────────┘ └────┴──────────┘
│ │
└─────────┬──────────────────┘
│
Tabelle C: Einschreibung
┌───────────┬─────────┐
│ SchuelerID│ KursID │
├───────────┼─────────┤
│ 1 │ 1 │
│ 1 │ 2 │
│ 2 │ 1 │
└───────────┴─────────┘
SELECT Schueler.Name, Kurse.Kursname
FROM Schueler
INNER JOIN Einschreibung ON Schueler.ID = Einschreibung.SchuelerID
INNER JOIN Kurse ON Einschreibung.KursID = Kurse.ID;
Ergebnis:
┌─────────┬──────────┐
│ Name │ Kursname │
├─────────┼──────────┤
│ Max │ Math │
│ Max │ Deutsch │
│ Anna │ Math │
└─────────┴──────────┘
Venn-Diagramme der JOINs:
INNER JOIN: LEFT JOIN: RIGHT JOIN:
┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐
│ A │ │ B │ │ A │ │ B │ │ A │ │ B │
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
│ ███ │ │████████ ███████ │
└─────┘ └─────┘ └─────┘
Nur Alles von A + Alles von B +
Überschneidung Überschneidung Überschneidung
FULL OUTER JOIN: CROSS JOIN:
┌───┐ ┌───┐ ┌───┐ ┌───┐
│ A │ │ B │ │ A │ │ B │
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
████████████ Jede Zeile von A
mit jeder Zeile von B
Die JOIN-Typen
Übersicht
- INNER JOIN: Nur übereinstimmende Zeilen
- LEFT JOIN: Alle Zeilen von links + Übereinstimmungen
- RIGHT JOIN: Alle Zeilen von rechts + Übereinstimmungen
- FULL OUTER JOIN: Alle Zeilen von beiden Tabellen
- CROSS JOIN: Kartesisches Produkt (jede mit jeder)
Syntax-Vergleich
INNER JOIN
SELECT s.name, k.kursname
FROM Schueler s
INNER JOIN Kurse k ON s.kurs_id = k.id;
LEFT JOIN
SELECT s.name, k.kursname
FROM Schueler s
LEFT JOIN Kurse k ON s.kurs_id = k.id;
Alte Syntax (mit WHERE)
-- Funktioniert, aber NICHT empfohlen
SELECT s.name, k.kursname
FROM Schueler s, Kurse k
WHERE s.kurs_id = k.id;
Prüfungsrelevant
JOIN vs WHERE:
- JOIN ist EXPLIZIT und LESBAR
- WHERE ist IMPLIZIT und schwerer zu verstehen
- Moderne SQL nutzt JOIN
Wichtigste JOIN-Typen:
- INNER JOIN: Standard, nur Übereinstimmungen
- LEFT JOIN: Wichtig für "auch wenn keine Zuordnung"
- RIGHT JOIN: Selten genutzt (meist umgedreht als LEFT)
ON vs USING:
ON: Flexibel, verschiedene SpaltennamenUSING: Nur wenn Spalten gleich heißen
Best Practices
- Tabellen-Aliase verwenden
FROM Schueler s -- ✓ Kurz und lesbar
JOIN Kurse k -- ✓
- JOIN statt WHERE
-- ✓ RICHTIG
FROM A JOIN B ON A.id = B.a_id
-- ✗ VERALTET
FROM A, B WHERE A.id = B.a_id
- Reihenfolge beachten
- Größte Tabelle zuerst
- Dann kleinere Tabellen joinen
Siehe auch
- INNER JOIN - Nur Übereinstimmungen
- LEFT JOIN - Alle von links
- RIGHT JOIN - Alle von rechts
- SQL FROM - Tabellen auswählen
- SQL WHERE - Filtern nach JOIN