left join tutorial uitleg wat het is

Introductie in tabellen combineren met SQL

Om meerdere redenen kan het handig zijn om data uit verschillende tabellen uit een relationele database te combineren met SQL. Zo kun je data samenvoegen in één tabel. Dit kun je doen met SQL LEFT JOIN, maar voordat we op dit specifieke statement ingaan is het belangrijk om even de verschillende mogelijkheden voor het combineren van tabellen te bekijken.

Mogelijkheden combineren van tabellen in SQL

Onderstaand overzicht geeft weer welke verschillende manieren er zijn om data uit tabellen te combineren met SQL. Daarnaast geeft het overzicht weer welke statements hiervoor binnen SQL beschikbaar zijn.

sql statements om tabellen samen te voegen overzicht left right inner full join

In dit blog gaan we in op SQL LEFT JOIN. We hebben ook blogs over de andere statements:

  • SQL RIGHT JOIN
  • SQL INNER JOIN
  • SQL FULL JOIN
  • SQL UNION


In deze blog gaan we in op het SQL LEFT JOIN statement

De volgende onderwerpen komen aan bod:

Wat is SQL LEFT JOIN?

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.

left join tutorial uitleg wat het is

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.


Voorbeeld SQL LEFT JOIN

We hebben tabellen movies en movies_genres:

voorbeeld sql left join


Tabel movies

idnameyearrank
10920Aliens19868.2
17173Animal House19787.5
18979Apollo 1319957.5
30959Batman Begins2005(NULL)
............
Columns: 4
Rows: 36

Deze tabel bevat films.


Tabel movies_genres

movie_idgenre
10920Sci-Fi
10920Action
10920Thriller
10920Horror
17173Comedy
18979Drama
......
Columns: 2
Rows: 103

Deze tabel bevat genres voor films.


Verwacht resultaat

  • In tabel movies hebben we data van 36 films.
  • In tabel movies_genres hebben 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:

idnameyearrankmovie_idgenre
10920Aliens19868.210920Sci-Fi
10920Aliens19868.210920Action
10920Aliens19868.210920Thriller
10920Aliens19868.210920Horror
17173Animal House19787.517173Comedy
..................


SQL LEFT JOIN toepassen

Dit resultaat krijgen we met een SQL LEFT JOIN:

SELECT
  *
FROM
  movies
  LEFT JOIN movies_genres ON movies_genres.movie_id = movies.id;
idnameyearrankmovie_idgenre
10920Aliens19868.210920Sci-Fi
10920Aliens19868.210920Action
10920Aliens19868.210920Thriller
10920Aliens19868.210920Horror
17173Animal House19787.517173Comedy
..................
Columns: 6
Rows: 103
  • We voegen linker tabel movies samen met rechter tabel movies_genres met LEFT JOIN.
  • Beide tabellen bevatten een kolom met het id van een film. Met ON leggen we deze koppeling.
  • 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 is belangrijk. Benoem eerst de linker- en daarna de rechter tabel.


Leren werken met SQL voor data analayse? Na onze 2-daagse SQL cursus kun je volledig zelfstandig werken met SQL.

SQL LEFT JOIN & aliassen

Met een alias geef je een kolom of tabel tijdens je query een andere naam. Dit wordt vaak gebruikt bij joins. Zo houd je je code kort en overzichtelijk.

We bekijken het volgende voorbeeld:

SELECT
  *
FROM
  movies AS m
  LEFT JOIN movies_genres AS mg ON mg.movie_id = m.id;
idnameyearrankmovie_idgenre
10920Aliens19868.210920Sci-Fi
10920Aliens19868.210920Action
10920Aliens19868.210920Thriller
10920Aliens19868.210920Horror
17173Animal House19787.517173Comedy
..................
Columns: 6
Rows: 103

Dit geeft hetzelfde resultaat als voorheen.

  • We gebruiken alias m voor tabel movies.
  • We gebruiken alias mg voor tabel movies_genres.


SQL LEFT JOIN met enkele kolommen

Tot nu toe selecteerden we alle kolommen:

idnameyearrankmovie_idgenre
10920Aliens19868.210920Sci-Fi
10920Aliens19868.210920Action
10920Aliens19868.210920Thriller
10920Aliens19868.210920Horror
17173Animal House19787.517173Comedy
..................

Je ziet dat kolommen id en movie_id dezelfde waarden bevatten.

We lossen dit op met de volgende code:

SELECT
  m.*,
  mg.genre
FROM
  movies AS m
  LEFT JOIN movies_genres AS mg ON mg.movie_id = m.id;
idnameyearrankgenre
10920Aliens19868.2Sci-Fi
10920Aliens19868.2Action
10920Aliens19868.2Thriller
10920Aliens19868.2Horror
17173Animal House19787.5Comedy
...............
Columns: 5
Rows: 103
  • Met m.* selecteren we alle kolommen uit tabel movies.
  • Met mg.genre selecteren alleen kolom genre uit tabel movies_genres.


SQL LEFT JOIN & groeperen

We hebben nu een tabel met films en hun genres.

Het zou bijvoorbeeld handig kunnen zijn om te weten hoeveel genres iedere film heeft?

Deze vraag kunnen we beanwoorden door te groeperen, met GROUP BY.

uitvoervolgorde irt left join sql

GROUP BY wordt later dan JOIN uitgevoerd. Hierdoor zijn de aliases ook in GROUP BY te gebruiken.

Lees alles over SQL uitvoervolgordes in dit blog

SELECT
  m.name,
  COUNT(mg.genre) AS genres_count
FROM
  movies AS m
  LEFT JOIN movies_genres AS mg ON mg.movie_id = m.id
GROUP BY
  m.name
ORDER BY
  genres_count DESC;
namegenres_count
Little Mermaid, The6
Shrek6
Vanilla Sky5
Batman Begins5
......
Columns: 2
Rows: 36

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:
SELECT
  *
FROM
  movies
  LEFT JOIN movies_genres ON movies_genres.movie_id = movies.id;
  • De volgorde van het benoemen van de tabellen is belangrijk.
    • Eeerst linker tabel, dan rechter tabel.
  • Je kunt aliases gebruiken voor tabelnamen.
  • Je kunt LEFT JOIN gebruiken in combinatie met andere SQL statements.
    • Zoals GROUP BY en ORDER BY.

Bezig om SQL onder de knie te krijgen?

Wellicht ben je bezig om SQL beter te leren. Wij schreven de volgende handige artikelen om je op weg te helpen:

Wil je nog veel meer leren over SQL? Bekijk dan onze SQL cursus voor data analyse of download onderstaande opleidingsbrochure. In onze SQL cursus wisselen theorie en praktijkoefening elkaar steeds af. Nadat je deze training hebt gevolgd kun je zelfstandig met SQL werken. Je kunt ook altijd even contact opnemen via info@datasciencepartners.nl of 020 - 24 43 146 als je een vraag hebt.

by: