Home » De LEFT JOIN: gebruik records uit linkertabel als basis

De LEFT JOIN: gebruik records uit linkertabel als basis

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. Zijn er geen overeenkomsten dan worden er NULL-waarden toegevoegd aan de resulterende dataset voor de rechtertabel.

De RIGHT JOIN daarentegen doet het tegenovergestelde. Deze geeft namelijk alle rijen van de rechtertabel en koppelt vervolgens overeenkomende rijen van de linkertabel. Rijen zonder overeenkomsten in de linkertabel zullen resulteren in NULL-waarden in de resulterende dataset voor de linkertabel.

Een voorbeeld van de LEFT 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.

Wanneer gebruik je de LEFT JOIN?

Wil je gegevens ophalen waarbij je zeker weet dat de gegevens wel aanwezig zijn in de linkertabel, maar waarbij de kans aanwezig zijn dat ze er niet zijn in de rechtertabel, dan is het gebruik van de LEFT JOIN een goede keuze.

Een goed voorbeeld is een tabel met medewerkers die gekoppeld is aan een tabel met afdelingen, waarbij een afdeling dus niet verplicht hoeft te zijn. We weten dat we altijd wel een medewerker hebben en optioneel halen we daar dus de afdeling bij op.

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.