SQL-query’s kunnen soms een beetje ingewikkeld lijken, vooral als je met meerdere tabellen werkt. Maar geen zorgen, we leggen het simpel uit!
Stel je voor dat je twee tabellen hebt: klanten en bestellingen.
- Klanten heeft informatie over klanten, zoals naam en klantnummer.
- Bestellingen heeft informatie over de bestellingen die klanten hebben geplaatst, zoals bestelnummer en datum.
De uitdaging is om de informatie uit deze twee tabellen te combineren en te begrijpen wie wat heeft besteld.
Hier komen de JOIN, INNER JOIN en LEFT JOIN in beeld! Laten we ze één voor één uitleggen.
1. JOIN (of INNER JOIN)
Een JOIN (vaak een INNER JOIN genoemd) haalt alleen de gegevens op waar er een overeenkomst is tussen de twee tabellen. Dit betekent dat je alleen de klanten ziet die ook bestellingen hebben geplaatst.
Voorbeeld:
Tabel Klanten:
klant_id | naam |
---|---|
1 | Jan |
2 | Anna |
3 | Peter |
Tabel Bestellingen:
bestel_id | klant_id | bestel_datum |
---|---|---|
101 | 1 | 2025-06-01 |
102 | 2 | 2025-06-02 |
Als je een query schrijft om de naam van klanten en hun besteldatum te zien, krijg je het volgende resultaat:
SELECT klanten.naam, bestellingen.bestel_datum
FROM klanten
INNER JOIN bestellingen
ON klanten.klant_id = bestellingen.klant_id;
Resultaat:
naam | bestel_datum |
---|---|
Jan | 2025-06-01 |
Anna | 2025-06-02 |
Let op: Peter komt niet in het resultaat voor omdat hij geen bestelling heeft geplaatst.
2. LEFT JOIN (of LEFT OUTER JOIN)
Een LEFT JOIN haalt alle rijen uit de linker tabel (in ons geval de klanten) en de bijbehorende rijen uit de rechter tabel (de bestellingen). Als er geen overeenkomende rij in de rechter tabel is, krijg je NULL
voor de kolommen van de rechter tabel.
Voorbeeld:
Als je dezelfde query uitvoert, maar nu met een LEFT JOIN, krijg je ook alle klanten te zien, zelfs de klanten die geen bestelling hebben geplaatst:
SELECT klanten.naam, bestellingen.bestel_datum
FROM klanten
LEFT JOIN bestellingen
ON klanten.klant_id = bestellingen.klant_id;
Resultaat:
naam | bestel_datum |
---|---|
Jan | 2025-06-01 |
Anna | 2025-06-02 |
Peter | NULL |
Peter komt nu wel in het resultaat voor, maar met een NULL
voor de bestel_datum, omdat hij geen bestelling heeft geplaatst.
Samenvatting van het Verschil
- INNER JOIN: Laat alleen de klanten zien die ook bestellingen hebben geplaatst. Als er geen bestelling is, krijg je de klant niet te zien.
- LEFT JOIN: Laat alle klanten zien, zelfs als ze geen bestelling hebben geplaatst. Als een klant geen bestelling heeft, krijg je
NULL
voor de bestelgegevens.
Wanneer Gebruik je Wat?
- INNER JOIN: Als je alleen geïnteresseerd bent in klanten die echt iets hebben besteld.
- LEFT JOIN: Als je alle klanten wilt zien, zelfs als ze geen bestelling hebben geplaatst.
Hopelijk maakt dit het verschil duidelijker! Het komt eigenlijk neer op de vraag: wil ik alleen klanten zien die ook daadwerkelijk iets hebben besteld (INNER JOIN) of wil ik alle klanten zien, zelfs als ze niets hebben gekocht (LEFT JOIN)?