Lass uns mit der Definition starten. RIGHT JOIN ist eine Art von Join, der alle Zeilen aus der rechten Tabelle zurückgibt (deshalb heißt er auch "right"), und aus der linken nur die passenden Zeilen. Wenn es in der linken Tabelle keine Daten gibt, die zu einer Zeile aus der rechten Tabelle passen, bekommst du NULL-Werte für die Spalten der linken Tabelle.
Du kennst bestimmt schon LEFT JOIN, das ist fast das Gleiche, nur eben "gespiegelt". Der Hauptunterschied ist, welche Tabelle als Haupttabelle gilt: die linke oder die rechte.
Syntax von RIGHT JOIN
Die Syntax von RIGHT JOIN ist praktisch identisch zu LEFT JOIN. So sieht das aus:
SELECT
spalten
FROM
tabelle_links RIGHT JOIN tabelle_rechts
ON
join_bedingung;
Achte auf die Reihenfolge der Tabellen:
- linke Tabelle steht vor
RIGHT JOIN; - rechte Tabelle kommt nach dem Wort
RIGHT JOIN.
Stell dir vor, wir haben zwei Tabellen:
students — Liste der Studierenden:
| student_id | name |
|---|---|
| 1 | Otto |
| 2 | Maria |
| 3 | Alex |
enrollments — Einträge über die Einschreibungen der Studierenden in Kurse:
| enrollment_id | course_name | student_id |
|---|---|---|
| 101 | Mathematik | 1 |
| 102 | Informatik | 2 |
| 103 | Biologie | NULL |
Jetzt wollen wir eine Liste aller Einschreibungen bekommen, und dazu die Infos über die Studierenden, falls es sie gibt. Wenn ein Student nicht gefunden wird, sehen wir NULL statt der Studierenden-Infos.
Der Query mit RIGHT JOIN sieht dann so aus:
SELECT
enrollments.enrollment_id,
enrollments.course_name,
students.name AS student_name
FROM
students RIGHT JOIN enrollments
ON
students.student_id = enrollments.student_id;
Das Ergebnis:
| enrollment_id | course_name | student_name |
|---|---|---|
| 101 | Mathematik | Otto |
| 102 | Informatik | Maria |
| 103 | Biologie | NULL |
Hier siehst du, dass alle Einträge aus der Tabelle enrollments (rechte Tabelle) im Ergebnis sind, auch wenn es keine passenden Zeilen in students (linke Tabelle) gibt.
Vergleich RIGHT JOIN und LEFT JOIN
Wenn du schon weißt, wie LEFT JOIN funktioniert, fragst du dich vielleicht: "Wozu brauche ich überhaupt RIGHT JOIN? Warum nicht einfach LEFT JOIN nehmen?" Gute Frage! Lass uns die Unterschiede anschauen und wann man wirklich RIGHT JOIN nehmen sollte.
Richtung der Daten
LEFT JOIN: gibt alle Zeilen aus der linken Tabelle zurück, egal ob es passende Zeilen in der rechten Tabelle gibt.RIGHT JOIN: gibt alle Zeilen aus der rechten Tabelle zurück, auch wenn es keine passenden Zeilen in der linken Tabelle gibt.
Wahl der Haupttabelle Normalerweise wählst du
LEFToderRIGHTje nachdem, welche Tabelle (links oder rechts) für dich wichtiger ist und in welcher Reihenfolge du den Query schreiben willst.Äquivalenz Jeder
RIGHT JOINlässt sich alsLEFT JOINschreiben, wenn du die Reihenfolge der Tabellen änderst. Zum Beispiel:-- RIGHT JOIN SELECT * FROM students RIGHT JOIN enrollments ON students.student_id = enrollments.student_id; -- Äquivalenter LEFT JOIN SELECT * FROM enrollments LEFT JOIN students ON students.student_id = enrollments.student_id;
Also, wenn du kein Fan von RIGHT JOIN bist, kannst du es immer umgehen!
Wann benutzt man RIGHT JOIN?
In der Praxis wird RIGHT JOIN seltener verwendet als LEFT JOIN. Aber es gibt Situationen, wo es praktisch ist:
- Wenn die rechte Tabelle wichtiger ist (zum Beispiel ist sie deine Haupttabelle);
- Wenn du den Query so strukturieren willst, dass die rechte Tabelle logisch nach der linken kommt;
- Wenn du mit Code arbeitest, der standardmäßig
RIGHT JOINnutzt.
Visuelle Darstellung von RIGHT JOIN
Um RIGHT JOIN besser zu verstehen, schau dir dieses Schema an:
Linke Tabelle Rechte Tabelle
[ A ] --------> [ 1 ]
[ B ] --------> [ 2 ]
[ C ] --------> [ 3 ]
[ D ] [ 4 ]
Mit RIGHT JOIN bekommst du alle Werte aus der rechten Tabelle zusammen mit den passenden Daten aus der linken Tabelle. Was in der linken Tabelle fehlt, wird mit NULL aufgefüllt.
Praktische Aufgabe
Lass uns dein Wissen testen. Hier ist die Aufgabe:
Du hast die Tabellen departments mit Abteilungen und employees mit Mitarbeitenden: departments:
| department_id | department_name |
|---|---|
| 1 | IT |
| 2 | Vertrieb |
| 3 | Buchhaltung |
employees:
| employee_id | name | department_id |
|---|---|---|
| 101 | Peter | 1 |
| 102 | Eva | 2 |
| 103 | Ron | NULL |
Schreib einen Query mit RIGHT JOIN, der alle Abteilungen zurückgibt, inklusive Mitarbeitenden, falls sie in der Abteilung sind, oder NULL, wenn es keine Mitarbeitenden gibt.
Probier die Aufgabe erst selbst zu lösen, bevor du in die Lösung schaust.
Lösung zur Aufgabe
So sieht der Query aus:
SELECT
departments.department_name,
employees.name AS employee_name
FROM employees RIGHT JOIN departments
ON employees.department_id = departments.department_id;
Das Ergebnis ist dann:
| department_name | employee_name |
|---|---|
| IT | Peter |
| Vertrieb | Eva |
| Buchhaltung | NULL |
Typische Fehler bei RIGHT JOIN
Wenn man mit RIGHT JOIN arbeitet, stolpern Anfänger oft über diese Probleme:
- Vergessen die Join-Bedingung
ON. Ohne Bedingungen bekommst du das kartesische Produkt der Tabellen – das kann ganz schön chaotisch werden. - Verwechseln
RIGHT JOINundLEFT JOIN. Wenn du die Tabellen in der falschen Reihenfolge benutzt, kommt ein falsches Ergebnis raus. - Behandeln
NULL-Werte nicht. Bei Queries mitRIGHT JOINtauchen oftNULLauf, die du richtig interpretieren oder mitCOALESCE()ersetzen solltest.
Das war's! Jetzt weißt du, wie du RIGHT JOIN benutzt, kennst den Unterschied zwischen RIGHT JOIN und LEFT JOIN und kannst den richtigen Join-Typ für deine Aufgaben wählen. In der nächsten Vorlesung reden wir ausführlicher über FULL OUTER JOIN, wo wir alles, alles aus beiden Tabellen zusammenbringen. Viel Erfolg bei deinen Queries!
GO TO FULL VERSION