Mit JOIN’s können zwei oder mehrere Tabellen zusammengefügt werden, solange es eine Verbindung (Relation à ForeignKey’s) zwischen den Tabellen gibt. Durch die verschiedenen Arten der JOIN’s, werden zu den eigentlichen Kriterien zusätzliche Regeln definiert.
Für die Beispiele verwenden wir folgende Tabellen.
|
|
INNER JOIN (JOIN)
Der INNER JOIN (oder auch nur JOIN) liefert die Schnittmenge beider Tabellen.
SELECT u.name, c.name
FROM user AS u
INNER JOIN course AS c ON u.course = c.id
| ![]() |
LEFT JOIN
Bei einem LEFT JOIN werden alle Datensätze der „Haupttabelle“ user mit denen der Tabelle course „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 course einfach mit einer NULL aufgefüllt.
SELECT u.name, c.name
FROM user AS u
LEFT JOIN course AS c ON u.course = c.id
| ![]() |
RIGHT JOIN
Hier läuft es eigentlich nur anders herum. Hier wird die „Haupttabelle“ user „rechts herum“ mit der Tabelle course verbunden. Hier werden also alle Datensätze der rechten Tabelle angezeigt und fehlende der linken mit NULL ausgefüllt.
SELECT u.name, c.name
FROM user
RIGHT JOIN course AS c ON u.course = c.id
| ![]() |
OUTER JOIN (FULL OUTER JOIN)
Bei einem Full Outer Join handelt es sich um eine Kombination aus einem LEFT JOIN und einem RIGHT JOIN. Das Ziel dabei ist, Datensätze zu verknüpfen. Wenn es aber keine Beziehung gibt, so sollen die entsprechenden Felder beider Tabellen mit einem NULL gefüllt werden.
MySQL bietet keine direkte Unterstützugn für den OUTER JOIN, aber man kann ohne grosse Aufwände SQL-Queries erstellen, welche solche OUTER JOIN’s imitieren.
SELECT u.name, c.name
FROM user AS u
LEFT JOIN course AS c ON u.course = c.id
UNION
SELECT u.name, c.name
FROM user AS u
RIGHT JOIN course AS c ON u.course = c.id
| ![]() |