
Data samenvoegen met RIGHT-, INNER- en FULL JOIN
Introductie
We hebben geleerd om een LEFT JOIN te gebruiken.
Dit is de meestvoorkomende manier om data uit tabellen te combineren.
We kijken nu naar enkele andere manieren:

1. RIGHT JOIN

Een LEFT JOIN geeft alle resultaten van een linker tabel, met overeenkomende resultaten uit een rechter tabel.
- Een
RIGHT JOINis het tegenovergestelde van eenLEFT JOIN.
Een RIGHT JOIN geeft alle resultaten van een rechter tabel, met overeenkomende resultaten uit een linker tabel.
1.1. LEFT JOIN 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 |
| ... | ... | ... | ... | ... | ... |
1.2. RIGHT JOIN voorbeeld
| movie_id | genre | id | name | year | rank |
|---|---|---|---|---|---|
| 10920 | Sci-Fi | 10920 | Aliens | 1986 | 8.2 |
| 10920 | Action | 10920 | Aliens | 1986 | 8.2 |
| 10920 | Thriller | 10920 | Aliens | 1986 | 8.2 |
| 10920 | Horror | 10920 | Aliens | 1986 | 8.2 |
| ... | ... | ... | ... | ... | ... |
Dit geeft hetzelfde resultaat (in andere volgorde) als de LEFT JOIN.
1.3. Wanneer RIGHT JOIN gebruiken
In de praktijk zul je veelal een LEFT JOIN gebruiken, geen RIGHT JOIN.
Een RIGHT JOIN kan je query overzichtelijker maken als je meer dan 2 tabellen in 1 query wilt samenvoegen.
2. INNER JOIN

Een LEFT JOIN geeft alle resultaten van een linker tabel, met overeenkomende resultaten uit een rechter tabel.
- Een
INNER JOINgeeft alleen resultaten waar er een match is in resultaten uit de linker tabel en rechter tabel.
Een INNER JOIN is hierdoor hetzelfde als:
LEFT JOINwaarna je lege waarden op toegevoegde kolommen uit de rechter tabel uitfiltert.
2.1. INNER JOIN voorbeeld
SELECT
movies_after_2000.*,
movies_genres.genre
FROM
movies_genres
INNER JOIN (
SELECT * FROM movies WHERE year > 2000
) movies_after_2000 ON movies_after_2000.id = movies_genres.movie_id;
Dit voorbeeld maakt gebruik van een subquery, waardoor movies_after_2000 nu verwijst naar een tabel met alleen films van na 2000 in plaats van alle films.
| 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 |
| ... | ... | ... | ... | ... | ... |
Je krijgt alleen genres te zien, waarvan ook films beschikbaar zijn die na 2000 zijn uitgekomen:
-
De query geeft 35 rijen als resultaat terug.
-
In de tabel
movies_genreszitten echter 103 rijen. Controleer dit zelf middelsSELECT COUNT(*) FROM movies_genres. -
De overige 68 rijen zijn gekoppeld aan films die voor 2000 zijn uitgekomen en zitten dus niet in het resultaat van de
INNER JOIN-query.
2.2. Wanneer INNER JOIN gebruiken
In de praktijk zul je veelal een LEFT JOIN gebruiken, geen INNER JOIN.
Een INNER JOIN gebruik je als je alleen resultaten wilt die in beide tabellen voorkomen.
3. FULL JOIN

Een LEFT JOIN geeft alle resultaten van een linker tabel, met overeenkomende resultaten uit een rechter tabel.
Een FULL JOIN geeft alle resultaten van een linker tabel, met alle resultaten uit een rechter tabel.
2.1. FULL JOIN 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 |
| ... | ... | ... | ... | ... | ... |
- Je krijgt alle films te zien, en ook alle genres.
- Voor films waarvan geen genres bekend zijn, zijn de kolommen uit tabel
movies_genresleeg. - Voor genres waarvan geen films bekend zijn, zijn de kolommen uit tabel
moviesleeg.
2.2. Wanneer FULL JOIN gebruiken
In de praktijk zul je veelal een LEFT JOIN gebruiken, geen FULL JOIN.
Een FULL JOIN gebruik je als je alle resultaten wilt die in beide tabellen voorkomen.
Samenvatting

LEFT JOINis het meest gebruikt.RIGHT JOINis het tegenovergestelde van eenLEFT JOIN.- Gebruik je soms voor beter overzicht bij samenvoegen van meer dan 2 tabellen.
INNER JOIN.- Als je alleen resultaten wilt die in beide tabellen voorkomen.
FULL JOIN.- Als je alle resultaten wilt van een linker tabel, met alle resultaten uit een rechter tabel.