Ga naar inhoud

Header

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:

Header




1. RIGHT JOIN

Header

Een LEFT JOIN geeft alle resultaten van een linker tabel, met overeenkomende resultaten uit een rechter tabel.

  • Een RIGHT JOIN is het tegenovergestelde van een LEFT JOIN.

Een RIGHT JOIN geeft alle resultaten van een rechter tabel, met overeenkomende resultaten uit een linker tabel.




1.1. LEFT JOIN voorbeeld

SELECT
  *
FROM
  movies
  LEFT JOIN movies_genres ON movies.id = movies_genres.movie_id;
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
... ... ... ... ... ...
Columns: 6
Rows: 103




1.2. RIGHT JOIN voorbeeld

SELECT
  *
FROM
  movies_genres
  RIGHT JOIN movies ON movies.id = movies_genres.movie_id;
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
... ... ... ... ... ...
Columns: 6
Rows: 103

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

Header

Een LEFT JOIN geeft alle resultaten van een linker tabel, met overeenkomende resultaten uit een rechter tabel.

  • Een INNER JOIN geeft alleen resultaten waar er een match is in resultaten uit de linker tabel en rechter tabel.


Een INNER JOIN is hierdoor hetzelfde als:

  • LEFT JOIN waarna 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
... ... ... ... ... ...
Columns: 6
Rows: 35

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_genres zitten echter 103 rijen. Controleer dit zelf middels SELECT 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

Header

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

SELECT
  *
FROM
  movies
  FULL JOIN movies_genres ON movies.id = movies_genres.movie_id;
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
... ... ... ... ... ...
Columns: 6
Rows: 103
  • Je krijgt alle films te zien, en ook alle genres.
  • Voor films waarvan geen genres bekend zijn, zijn de kolommen uit tabel movies_genres leeg.
  • Voor genres waarvan geen films bekend zijn, zijn de kolommen uit tabel movies leeg.




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

Header

  • LEFT JOIN is het meest gebruikt.
  • RIGHT JOIN is het tegenovergestelde van een LEFT 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.