MySQL - Joins - Left/Right Join
1. Der feine Unterschied
Während ein INNER JOIN
immer ein genaues Kreuzprodukt ergibt, so verhält es sich in diesem Fall ein wenig anders. Dazu schauen
wir uns mal die folgenden Tabellen an:
Tabelle 'hersteller' Tabelle 'produkt'
+----+--------------+ +----+--------------+--------+
| id | zulieferer | | id | produkt |hs_link |
+----+--------------+ +----+--------------+--------+
| 1 | Hilti | | 1 | Schlagbohrer | 1 |
| 2 | Hoch & Tief | | 2 | Zement | 2 |
| 3 | Eisen-Karl | | 3 | Kneifzange | 3 |
| 4 | Stahl AG | | 4 | Brecheisen | 3 |
| 5 | Gähn & Söhne | | 5 | Hammer | 4 |
+----+--------------+ +----+--------------+--------+
Die Verknüpfung erfolgt über die Spalte hs_link
in der Tabelle produkt
wo wir die IDs aus der Tabelle
hersteller
abspeichern. Wie das geübte Auge sofort erkennt, gibt es einen Hersteller, für den offenbar kein Produkt existiert.
Wenn wir jetzt alle(!) Hersteller inklusive ihrer Machwerke auflisten wollen, so gibt es zwei Möglichkeiten.
2. LEFT JOIN
SELECT
h.zulieferer,
p.produkt
FROM
hersteller h
LEFT JOIN
produkt p ON (h.id = p.hs_link);
Erläuterung
Bei einem LEFT JOIN
werden alle Datensätze der "Haupttabelle" hersteller
mit denen der Tabelle
produkt
"links herum" (LEFT JOIN
) verknüpft. Das bedeutet, dass alle Datensätze der "linken" Tabelle auf
jeden Fall angezeigt werden. Gibt es in der "rechten" Tabelle keine entsprechende Relation, so wird der fehlende Teil der Spalte
produkt
einfach mit einer NULL
aufgefüllt. Und das Ergebnis sieht so aus.
+--------------+--------------+
| zulieferer | produkt |
+--------------+--------------+
| Hilti | Schlagbohrer |
| Hoch & Tief | Zement |
| Eisen-Karl | Kneifzange |
| Eisen-Karl | Brecheisen |
| Stahl AG | Hammer |
| Gähn & Söhne | NULL |
+--------------+--------------+
3. RIGHT JOIN
SELECT
h.zulieferer,
p.produkt
FROM
produkt p
RIGHT JOIN
hersteller h ON (h.id = p.hs_link);
Erläuterung
Hier läuft es eigentlich nur anders herum. Hier wird die "Haupttabelle" produkt
"rechts herum" mit der Tabelle
hersteller
verbunden. Hier werden also alle Datensätze der rechten Tabelle angezeigt und fehlende der linken mit
NULL
ausgefüllt.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt