
Data samenvoegen met LEFT JOIN
Introductie
Er zijn verschillende manieren om data samen te voegen.
We kijken naar de LEFT JOIN.
De LEFT JOIN wordt in de praktijk het meest gebruikt.

Je gebruikt een LEFT JOIN als volgt:
- Je hebt een tabel (left table).
- Aan deze tabel wil je gegevens uit een andere tabel toevoegen (right table).
- Met een
LEFT JOIN:- Selecteer je alle rijen uit de linker tabel.
- Met daarbij voor iedere rij een match met data uit de rechter tabel.
We gaan dit vanuit een voorbeeld bekijken.
1. Voorbeeld LEFT JOIN
We hebben tabellen movies en movies_genres:

1.1. Tabel movies
| id | name | year | rank |
|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 |
| 17173 | Animal House | 1978 | 7.5 |
| 18979 | Apollo 13 | 1995 | 7.5 |
| 30959 | Batman Begins | 2005 | (NULL) |
| ... | ... | ... | ... |
1.2. Tabel movies_genres
| movie_id | genre |
|---|---|
| 10920 | Sci-Fi |
| 10920 | Action |
| 10920 | Thriller |
| 10920 | Horror |
| 17173 | Comedy |
| 18979 | Drama |
| ... | ... |
1.3. Verwacht resultaat
- In tabel
movieshebben we data van 36 films. - In tabel
movies_genreshebben we 103 genres van films. - Iedere film kan meerdere genres hebben.
- Dit is een one-to-many relatie.
Als we voor iedere film de genres zouden opzoeken, zou dit tot onderstaand resultaat moeten leiden:
| id | name | year | rank | movie_id | genre |
|---|---|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 | 10920 | Sci-Fi |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Action |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Thriller |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Horror |
| 17173 | Animal House | 1978 | 7.5 | 17173 | Comedy |
| ... | ... | ... | ... | ... | ... |
1.4. LEFT JOIN toepassen
Dit resultaat krijgen we met een LEFT JOIN:
| id | name | year | rank | movie_id | genre |
|---|---|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 | 10920 | Sci-Fi |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Action |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Thriller |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Horror |
| 17173 | Animal House | 1978 | 7.5 | 17173 | Comedy |
| ... | ... | ... | ... | ... | ... |
- We voegen linker tabel
moviessamen met rechter tabelmovies_genres.- Met
LEFT JOIN.
- Met
- Beide tabellen bevatten een kolom met het
idvan een film.- Met
ONleggen we deze koppeling.
- Met
- We selecteren alle kolommen uit het resultaat.
- Je krijgt daarbij ook resultaten uit de linker tabel, waarvan geen match is in de rechter tabel.
De syntax voor een LEFT JOIN is als volgt:
SELECT
*
FROM
<left_table>
LEFT JOIN <right_table> ON <left_table>.<column> = <right_table>.<column>;
- De volgorde van de tabellen rondom
LEFT JOINis belangrijk.- Benoem eerst de linker- en daarna de rechter tabel.
- De volgorde van specificaties in het
ONstatement heeft geen invloed.
2. Aliases
Met een alias geef je een kolom of tabel tijdens je query een andere naam.
- Dit wordt vaak gebruikt bij joins.
We bekijken het volgende voorbeeld:
| id | name | year | rank | movie_id | genre |
|---|---|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 | 10920 | Sci-Fi |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Action |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Thriller |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Horror |
| 17173 | Animal House | 1978 | 7.5 | 17173 | Comedy |
| ... | ... | ... | ... | ... | ... |
Dit geeft hetzelfde resultaat als voorheen.
- We gebruiken alias
mvoor tabelmovies. - We gebruiken alias
mgvoor tabelmovies_genres.
3. Selectie van kolommen
Tot nu toe selecteerden we alle kolommen:
| id | name | year | rank | movie_id | genre |
|---|---|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 | 10920 | Sci-Fi |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Action |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Thriller |
| 10920 | Aliens | 1986 | 8.2 | 10920 | Horror |
| 17173 | Animal House | 1978 | 7.5 | 17173 | Comedy |
| ... | ... | ... | ... | ... | ... |
Je ziet dat kolommen id en movie_id dezelfde waarden bevatten.
We lossen dit op met de volgende code:
| id | name | year | rank | genre |
|---|---|---|---|---|
| 10920 | Aliens | 1986 | 8.2 | Sci-Fi |
| 10920 | Aliens | 1986 | 8.2 | Action |
| 10920 | Aliens | 1986 | 8.2 | Thriller |
| 10920 | Aliens | 1986 | 8.2 | Horror |
| 17173 | Animal House | 1978 | 7.5 | Comedy |
| ... | ... | ... | ... | ... |
- Met
m.*selecteren we alle kolommen uit tabelmovies. - Met
mg.genreselecteren alleen kolomgenreuit tabelmovies_genres.
4. Groeperen
We hebben nu een tabel met films en hun genres.
Het zou bijvoorbeeld handig kunnen zijn om te weten:
- Hoeveel genres heeft iedere film?
Deze vraag kunnen we beanwoorden door te groeperen, met GROUP BY.

GROUP BYwordt later danJOINuitgevoerd.- Hierdoor zijn de aliases ook in
GROUP BYte gebruiken.
SELECT
m.name,
COUNT(mg.genre) AS genres_count
FROM
movies AS m
LEFT JOIN movies_genres AS mg ON m.id = mg.movie_id
GROUP BY
m.name
ORDER BY
genres_count DESC;
| name | genres_count |
|---|---|
| Little Mermaid, The | 6 |
| Shrek | 6 |
| Vanilla Sky | 5 |
| Batman Begins | 5 |
| ... | ... |
Je ziet dat we nu mooi gesorteerd het aantal genres per film zien.
Samenvatting
LEFT JOIN:- Eerste tabel (left table).
- Tweede tabel (right table).
- Met een
LEFT JOIN:- Selecteer je alle rijen uit de linker tabel.
- Met daarbij voor iedere rij een match met data uit de rechter tabel.
- Je krijgt daarbij ook resultaten uit de linker tabel, waarvan geen match is in de rechter tabel.
- Voorbeeld:
- De volgorde van het benoemen van de tabellen is belangrijk.
- Eerst linker tabel, dan rechter tabel.
- Je kunt aliases gebruiken voor tabelnamen.
- Je kunt
LEFT JOINgebruiken in combinatie met andere SQL statements.- Zoals
GROUP BYenORDER BY.
- Zoals