
Kartesischer Join (Cross Join)
Der CROSS JOIN verknüpft jede Zeile aus der ersten Tabelle mit allen Zeilen aus der zweiten Tabelle:
SELECT m.nachname, m.vorname, s.sportart
FROM mitglied m CROSS JOIN sportart s;
SELECT m.nachname, m.vorname, s.sportart
FROM mitglied m, sportart s;Wozu sollte man den CROSS JOIN kennen?
- Sensibilisierung für den Fall fehlender Verknüpfungen
- einfaches Erzeugen von Massendaten für Geschwindigkeitstests
Inner Join
Ein INNER JOIN kombiniert die Datensätze zweier Tabellen über Vergleichsoperatoren in einer Bedingung.
Equi Join
Variante 1:
SELECT m.nachname, m.vorname, l.sport_id
FROM mitglied m
INNER JOIN link_mitglied_sportart l ON m.m_id = l.m_id;Variante 2:
SELECT m.nachname, m.vorname, l.sport_id
FROM mitglied m, link_mitglied_sportart l WHERE m.m_id = l.m_id;Equi Join mit mehreren Tabellen
Variante 1:
SELECT m.nachname, m.vorname, s.sportart
FROM mitglied m
INNER JOIN link_mitglied_sportart l ON m.m_id = l.m_id
INNER JOIN sportart s ON l.sport_id = s.sport_id;Variante 2:
SELECT m.nachname, m.vorname, s.sportart
FROM mitglied m, link_mitglied_sportart l, sportart s
WHERE m.m_id = l.m_id AND l.sport_id = s.sport_id;Natural Join
NATURAL JOINs werden durch identische Spaltennamen identifiziert. D.h. es werden alle Spalten verknüpft, die in den abgefragten Tabellen gleich heißen. Diese Art des Joins kann zu Fehlern führen, wenn nachträglich Spaltennamen in den beteiligten Tabellen geändert werden.
SELECT m.nachname, m.vorname, l.sport_id
FROM mitglied m NATURAL JOIN link_mitglied_sportart lOuter Join
Left Outer Join
Der LEFT OUTER JOIN selektiert alle Datensätze aus der linken Tabelle und die Zeilen aus der rechten Tabelle, die der Verknüpfung entsprechen.
… A LEFT OUTER JOIN B …
- Zeige alle Datensätze aus A und die aus B, die gleich sind.
- Fehlende DS in B werden als NULL Spalten dargestellt.
- Filter sind anwendbar.
SELECT m.m_id, m.nachname, m.vorname, l.sport_id
FROM mitglied m
LEFT OUTER JOIN link_mitglied_sportart l ON m.m_id = l.m_id;Right Outer Join
… A RIGHT OUTER JOIN B …
- Zeige alle Datensätze aus B und die aus A, die gleich sind.
- Fehlende DS in A werden als NULL Spalten dargestellt.
- Filter sind anwendbar.
SELECT l.m_id, l.sport_id, s.sport_id, s.sportart FROM link_mitglied_sportart l RIGHT OUTER JOIN sportart s ON l.sport_id = s.sport_id;Full Outer Join
Manche DBS ermöglichen auch einen FULL OUTER JOIN als eine Kombination aus LEFT OUTER JOIN und RIGHT OUTER JOIN MySQL nicht!
Fehlende Datensätze Filtern
Fehlende Datensätze werden im Ergebnis der Abfrage als NULL-Werte angezeigt. Diese NULL-Werte können im WHERE-Abschnitt gefiltert werden:
WHERE spalte IS NULL
Self Join
Es ist ebenfalls möglich, eine Tabelle mit sich selbst zu verknüpfen. Man spricht hier von einem SELF-JOIN. Der Tabellennamen wird in der FROM-Klausel zweimal angegeben. Es müssen dafür zwei unterschiedliche Alias Namen vergeben werden.
SELECT vg.m_id, vg.vorname, vg.nachname, ma.m_id, ma.vorname, ma.nachname
FROM mitarbeiter vg
INNER JOIN mitarbeiter ma ON vg.m_id = ma.chef_id