Meer dan 2 tabellen
Het is met de JOIN ook prima mogelijk om op meerdere tabellen te JOINEN. Dit is het gemakkelijkst uit te leggen aan de hand van een voorbeeld uit onze coureurs/ renstal tabellen.
Stel dat je de thuisbaan van een coureur wilt weten. Hiervoor hebben we de volgende tabellen nodig: (ik heb ze voor dit voorbeeld wat aangepast, omdat je anders met de datum rekening moet houden)
TABEL coureurs:
- id (1, 2, 3, 4, 5, 6)
- coureur (Jansen, Schumacher, Verstappen, Rubens, Heins, Markus)
- leeftijd (41, 39, 23, 34, 35, 24)
- renstal (1,NULL,NULL,3,4,NULL)
TABEL renstal:
- id (1,2,3,4)
- naam (Snel, Sneller, Snelst, Allersnelst)
TABEL racebaan:
- id (1,2,3,4,5)
- land (Nl, De, GB, Bra, Be)
- thuisbaan_van (1,3,NULL,NULL,2)
Hier zijn 3 tabellen voor nodig, zoals je ziet. Om de werking van het gebruik van meerdere JOINS in 1 query goed te kunnen begrijpen, moet je onthouden dat een JOIN 2 tabellen samenvoegt tot 1 nieuwe tabel.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query= "SELECT
c.naam,
rb.land
FROM
coureurs AS c
INNER JOIN
(racebaan AS rb
INNER JOIN
renstal AS rs
ON
rs.id = rb.thuisbaan_van)
ON
rs.id =c.renstal";
?>
Je mag in deze voorbeeldquery stellen dat dit deel:
(racebaan AS rb
INNER JOIN
renstal AS rs
ON
rs.id = rb.thuisbaan_van)
Een nieuwe tabel vormt, uit die 2 tabellen, waar je vervolgens weer een join op kan toepassen. Op deze manier kan je je query uitbreiden tot een grote query met een groot aantal joins.
Het resultaat van bovenstaande join zal er zo uitzien:
Jansen -> Nl
Rubens -> De
Als je naar de tabellen kijkt zie je ook dat dit de enige coureurs zijn die bij een renstal zitten die een thuisbaan heeft. Door hier weer de verschillende JOIN typen op toe te passen, kan je ook gegevens over coureurs zonder thuisbaan ophalen.