Multiple Joins
Natuurlijk zijn de in de voorgaande “hoofdstukken” genoemde Joins niet compleet. Je krijgt nu bij een film alleen de actor_id te zien, maar je weet niet wie er in de film speelt. Hiervoor heb je een koppeling tussen alle 3 de tabellen nodig. Natuurlijk is de titel “Multiple Join” geen officiële benaming, maar het dekt wel de lading van wat ik jullie hier laat zien.
Deze “multiple join” schreef ik in de vorige tutorial anders uit dan hier. Ook ik leer natuurlijk bij en heb geleerd dat het noteren van een “Multiple Join” zonder de haakjes (ik zal beide voorbeelden hier laten zien) prima kan en minstens net zo gemakkelijk is. Sterker nog, hij is gemakkelijker te lezen (omdat het van boven naar beneden geld) dan de variant met haakjes. (daar ga je uit van de “laatste join” omdat die twee tabellen de basis vormen dan dan weer verder omhoog) In de variant zonder haakjes vormen de eerste twee tabellen de basis enzo verder tot aan de laatste Join.
Goed, om te laten zien hoe die multiple Join eruit kan komen te zien, hieronder eerst de variant met haakjes:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
m.id AS id_movie,
m.title,
CONCAT(a.firstname, ,a.lastname)
FROM
movies AS m
INNER JOIN
(movie_actors AS ma
INNER JOIN
actors AS a
ON
a.id = ma.actor_id)
ON
m.id = ma.movie_id
Om bovenstaande code te “lezen” lees je eerst de Join die tussen haakjes staat. Er wordt in theorie (in praktijk weet ik niet hoe het aan de achterkant gaat, maar deze uitleg maakt het misschien wat begrijpelijker) een tabel gemaakt van de Join tussen movie_actors en actors, en vervolgens een Join op deze nieuwe tabel met de movies tabel.
Gemakkelijker vind ikzelf (dit is echter maar net wat je zelf prettiger vindt) de notatie zonder haakjes, omdat je zo gewoon van boven naar beneden kan lezen. (zie de voorbeeldcode hieronder)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
m.id AS id_movie,
m.title,
CONCAT(a.firstname, ,a.lastname)
FROM
movies AS m
INNER JOIN
movie_actors AS ma
ON
m.id = ma.movie_id
INNER JOIN
actors AS a
ON
a.id = ma.actor_id
Hier wordt eerst een nieuwe tabel gemaakt van de join tussen movies en movie_actors om vervolgens deze nieuwe tabel te combineren met de actors tabel.
Beide query’s doen verder precies hetzelfde en hebben hetzelfde resultaat. De volgorde van de tabellen maakt niet heel veel uit in de Join, maar je moet er wel altijd rekening mee houden dat je eerst zorgt dat je in de tabel “tot dan toe” (je kan dit namelijk ook toepassen op nog meer tabellen dan de 3 uit het voorbeeld) de informatie beschikbaar hebt die je voor de Join nodig hebt. In het in deze tutorial gebruikte voorbeeld heb je om te beginnen dus altijd een Join nodig tussen één van de tabellen met tekstuele informatie (actors of movies) en de koppeltabel.
De informatie die je uit deze query krijgt ziet er als volgt uit:
2
3
4
5
6
2 Tombe rijder Angel Jolige
3 Zeven jaar in de bergen Brador Pittje
1 Eduard Schaarhand John Depperd
3 Zeven jaar in de bergen John Depperd
2 Tombe rijder Arno Zwartebesje
Hieronder is schematisch aangegeven welke gegevens met deze “Multiple Join” worden geselecteerd.
Inhoudsopgave
- Inleiding
- Tabelopbouw
- Inner Join
- Left Join
- Left Join (IS NULL)
- Right Join
- Right Join (IS NULL)
- Outer Join
- Outer Join (IS NULL)
- Multiple Joins
- Tabel met zichzelf Joinen
- Tot slot