LEFT JOIN funktioniert ähnlich wie INNER JOIN mit dem Unterschied, dass Einträge der linken Tabelle keine Verbindung zu den Daten der rechten Tabelle haben müssen, um selektiert zu werden.
kurz: Selektiere alles von der linken Tabelle, auch wenn in der rechten kein übereinstimmender Wert vorhanden ist.
LEFT JOIN Syntax
SELECT * FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.spalten_name = tabelle2.spalten_name
Die Auswirkungen von LEFT JOIN wollen wir anhand des Beispiels aus JOIN – Tabellen zusammenfügen veranschaulichen.
INNER JOIN
SELECT * FROM users JOIN questions ON users.id = questions.user_id
LEFT JOIN
SELECT * FROM users LEFT JOIN questions ON users.id = questions.user_id
Im Gegensatz zum INNER JOIN, bei dem in beiden Tabellen der verknüpfende Wert vorhanden sein muss, ist das beim LEFT JOIN nicht der Fall. Beim LEFT JOIN werden alle Werte der linken Tabelle mit ins Result Set gepackt, auch wenn kein übereinstimmender Wert in der rechten Tabelle vorhanden ist.
Dazu noch ein passendes Beispiel. Wir wollen alle User selektieren, die bislang noch keine Frage gestellt haben.
SELECT users.username FROM users LEFT JOIN questions ON users.id = questions.user_id WHERE questions.user_id IS NULL
Da das LEFT JOIN Result Set eine Tabelle erzeugt in der auch User gelistet werden, die keine Frage gestellt haben, können wir mittels IS NULL prüfen ob eine bestimmte Spalte den Wert NULL hat (wenn kein Wert vorhanden ist, wird automatisch NULL gesetzt). Dadurch ziehen wir uns aus dem LEFT JOIN die NULL Zeilen und erhalten damit die User, die noch keine Frage gestellt haben.