Hauptmenü

Untermenü

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 |
+----+--------------+   +----+--------------+--------+
|  Hilti        |   |  Schlagbohrer |      |
|  Hoch Tief  |   |  Zement       |      |
|  Eisen-Karl   |   |  Kneifzange   |      |
|  Stahl AG     |   |  Brecheisen   |      | 
|  Gähn Söhne |   |  Hammer       |      |
+----+--------------+   +----+--------------+--------+

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