De LEFT JOIN
geeft altijd alle rijen terug van de linkertabel. Als er overeenkomsten zijn met de rechtertabel, dan worden deze ook meegenomen in het resultaat.
Het kan ook andersom door middel van de RIGHT JOIN
.
SELECT Tabelnaam1.kolomnaam1, Tabelnaam2.kolomnaam1
FROM Tabelnaam1
LEFT JOIN Tabelnaam2
ON Tabelnaam1.kolomnaam1 = Tabelnaam2.kolomnaam1
Alle resultaten uit Tabelnaam1
zijn zichtbaar en indien aanwezig de data uit Tabelnaam2
ook.
In sommige databases moet LEFT OUTER JOIN
worden gebruikt in plaats van LEFT JOIN
.
LEFT JOIN
in de praktijk
De volgende dataset is de inhoud van de tabel Order.
ordernummer, klantid, orderbedrag 1, 1, '23.20' 2, 4, '2.30' 3, 3, '12.93' 4, 4, '54.92' 5, 1, '6.12' 6, 4, '9.60' 7, 5, '15.56'
De volgende dataset is de inhoud van de tabel Klant.
id, voornaam, achternaam, woonplaats 1, 'Henk', 'Janssen', 'Amsterdam' 2, 'Petra', 'de klomp', 'Nijmegen' 3, 'Sjoerd', 'Vermeulen', 'Maastricht' 4, 'Mieke', 'Sterk', 'Amsterdam'
De relatie tussen beide tabellen is gelegd met het veld Order.klantid dat verwijst naar Klant.id
We willen met de volgende query alle personen opvragen uit de database. Als er voor een persoon ook nog een matchende order is, dan willen we deze ook tonen.
SELECT *
FROM Persoon
LEFT JOIN Orders ON Persoon.id = Orders.klantid
id, voornaam, achternaam, woonplaats, ordernummer, klantid, orderbedrag 1, 'Henk', 'Janssen', 'Amsterdam', 1, 1, '23.20' 1, 'Henk', 'Janssen', 'Amsterdam', 5, 1, '6.12' 2, 'Petra', 'de klomp', 'Nijmegen', NULL, NULL, NULL 3, 'Sjoerd', 'Vermeulen', 'Maastricht', 3, 3, '12.93' 4, 'Mieke', 'Sterk', 'Amsterdam', 2, 4, '2.30' 4, 'Mieke', 'Sterk', 'Amsterdam', 4, 4, '54.92' 4, 'Mieke', 'Sterk', 'Amsterdam', 6, 4, '9.60'
In de resultset hierboven is te zien dat alle records uit de tabel Persoon zijn opgehaald. Voor bijna iedereen is er een corresponderend resultaat uit de tabel Order. Alleen voor Petra de klomp is geen order bekend, daarom zijn de waardes voor haar NULL
.