LEFT JOIN
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
.