CodeGym /Kurse /SQL SELF /Verwendung von LEFT JOIN: alle Daten aus de...

Verwendung von LEFT JOIN: alle Daten aus der linken Tabelle einbeziehen

SQL SELF
Level 11 , Lektion 2
Verfügbar

Stell dir vor, du hast zwei Tabellen: eine Liste von Studenten und eine Liste ihrer Kursanmeldungen. Nicht alle Studenten sind für Kurse angemeldet, und du willst die komplette Liste aller Studenten sehen, auch die, die aus irgendeinem Grund noch keinen Kurs gewählt haben. Mit INNER JOIN siehst du nur die, die angemeldet sind, aber was ist mit den anderen? Genau dafür gibt es LEFT JOIN.

LEFT JOIN gibt dir alle Zeilen aus der linken Tabelle (die, die im Query zuerst steht) und die passenden Zeilen aus der rechten Tabelle. Wenn es keine passenden gibt, bekommst du für die Spalten der rechten Tabelle NULL-Werte.

Syntax von LEFT JOIN

SELECT
    tabelle1.spalte1,
    tabelle1.spalte2,
    tabelle2.spalte1,
    tabelle2.spalte2    
FROM 
    tabelle1 LEFT JOIN tabelle2
ON 
    tabelle1.gemeinsame_spalte = tabelle2.gemeinsame_spalte;
  • tabelle1 — das ist die "linke" Tabelle.
  • tabelle2 — das ist die "rechte" Tabelle.
  • gemeinsame_spalte — die gemeinsame Spalte, nach der gejoint wird.

Beispiel ganz einfach erklärt

Wenn die Tabelle students so aussieht:

student_id name
1 Otto
2 Anna
3 Peter

Und die Tabelle enrollments sieht so aus:

enrollment_id student_id course
1 1 Mathematik
2 1 Physik
3 2 Biologie

Dann ergibt der Query:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

folgendes Ergebnis:

name course
Otto Mathematik
Otto Physik
Anna Biologie
Peter NULL

Wie du siehst, sind im Ergebnis alle Studenten enthalten, sogar Peter, der sich noch für keinen Kurs angemeldet hat. Für Peter steht in der Spalte course NULL.

Beispiele für die Verwendung von LEFT JOIN

Beispiel 1: Liste aller Studenten und ihrer Kurse holen

Stell dir vor, du willst die komplette Liste der Studenten zusammen mit den Kursen, für die sie angemeldet sind, falls vorhanden. Wenn ein Student noch keinen Kurs gewählt hat, soll das auch angezeigt werden.

Der gleiche Query:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Ergebnis:

name course
Otto Mathematik
Otto Physik
Anna Biologie
Peter NULL

Das ist ein klassisches Beispiel für LEFT JOIN.

Beispiel 2: Produkte und ihre Verkäufe anzeigen

Angenommen, du hast zwei Tabellen:

Die Tabelle products mit allen Produkten:

product_id product_name
1 Smartphone
2 Tablet
3 Laptop

Die Tabelle sales mit den Verkaufsdaten:

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

Jetzt willst du alle Produkte und die Anzahl ihrer Verkäufe sehen, auch die Produkte, die noch nicht verkauft wurden.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Ergebnis:

product_name total_sold
Smartphone 8
Tablet 2
Laptop NULL

Besonderheiten und Probleme bei LEFT JOIN

Braucht man immer NULL?
Manchmal bringt LEFT JOIN ein NULL rein, wo du es nicht erwartest. In solchen Fällen kannst du NULL durch einen verständlichen Wert mit der Funktion COALESCE() ersetzen.

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Kurs nicht gewählt') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Ergebnis:

name course
Otto Mathematik
Otto Physik
Anna Biologie
Peter Kurs nicht gewählt

Unnötige Duplikate
Wenn die Daten in der rechten Tabelle doppelte Einträge haben, bekommst du im Ergebnis mehr Zeilen als erwartet. Schau dir deine Daten genau an und benutze DISTINCT, wenn du keine Duplikate willst.

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