CodeGym /Kurse /SQL SELF /`RIGHT JOIN` und wie man es benutzt

`RIGHT JOIN` und wie man es benutzt

SQL SELF
Level 11 , Lektion 3
Verfügbar

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:

  1. linke Tabelle steht vor RIGHT JOIN;
  2. 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.

  1. 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.
  2. Wahl der Haupttabelle Normalerweise wählst du LEFT oder RIGHT je nachdem, welche Tabelle (links oder rechts) für dich wichtiger ist und in welcher Reihenfolge du den Query schreiben willst.

  3. Äquivalenz Jeder RIGHT JOIN lässt sich als LEFT JOIN schreiben, 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 JOIN nutzt.

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:

  1. Vergessen die Join-Bedingung ON. Ohne Bedingungen bekommst du das kartesische Produkt der Tabellen – das kann ganz schön chaotisch werden.
  2. Verwechseln RIGHT JOIN und LEFT JOIN. Wenn du die Tabellen in der falschen Reihenfolge benutzt, kommt ein falsches Ergebnis raus.
  3. Behandeln NULL-Werte nicht. Bei Queries mit RIGHT JOIN tauchen oft NULL auf, die du richtig interpretieren oder mit COALESCE() 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!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION