Joins algemeen

Join is het samenvoegen van 2 of meer tabellen tot één grote verzameling van kolommen.

Stel we hebben 3 tabellen:
tabel_a met de kolommen a_id, a_naam, a_iets
tabel_b met de kolommen b_id, a_id, b_naam, b_iets, b_nogwat
tabel_c met de kolommen c_id, a_id, c_naam, c_iets, c_nogwat

In de eerste stap worden tabel_a en tabel_b samengevoegd, (tussen)resultaat:
tabel_a.a_id
tabel_a.a_naam
tabel_a.a_iets
- - - - - - - - - - - - - - - -
tabel_b.b_id
tabel_b.a_id
tabel_b.b_naam
tabel_b.b_iets
tabel_b.b_nogwat

Dan wordt in de tweede stap tabel_c erbij gevoegd, resultaat:
tabel_a.a_id
tabel_a.a_naam
tabel_a.a_iets
tabel_b.b_id
tabel_b.a_id
tabel_b.b_naam
tabel_b.b_iets
tabel_b.b_nogwat
- - - - - - - - - - - - - - - -
tabel_c.c_id
tabel_c.a_id
tabel_c.c_naam
tabel_c.c_iets
tabel_c.c_nogwat

Zoals je ziet worden bij elke join de kolommen van de tabel die gejoind wordt aan de verzameling toegevoegd.
Ik heb door middel van de stippellijn aangeven wat door SQL als links (boven de stippelijn) en rechts (eronder) beschouwd wordt. Die stippellijn zal bij elke join dus opschuiven.

In theorie zijn er beperkingen op het aantal joins dat in een query toegepast kan worden (zo'n 60 in MySQL), maar in de praktijk zal je dit nooit halen (met een goed data model).

Al die kolommen kunnen in een query gebruikt worden; in de select lijst, in de join voorwaarden, in de where clause, kortom net zoals bij een query over één tabel.



Join syntax
Inner join (impliciet):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    kolomlijst
FROM
    tabelnaam [[AS] alias1], tabelnaam[[AS] alias2]
WHERE
    alias1.idcol = alias2.idcol

Inner join (expliciet):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    kolomlijst
FROM
    tabelnaam [[AS] alias1]
[INNER] JOIN tabelnaam [[AS] alias2]
    {ON alias1.idcol = alias2.idcol | USING (idcol)}

Outer join:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    kolomlijst
FROM
    tabelnaam [[AS] alias1]
{LEFT|RIGHT|FULL} [OUTER] JOIN tabelnaam[[AS] alias2]
    {ON alias1.idcol = alias2.idcol | USING (idcol)}

Het keyword outer is optioneel, maar als je een outer join wilt toepassen je deze altijd vooraf moeten laten gaan door LEFT, RIGHT of FULL.
OUTER JOIN alleen zal een SQL foutmelding opleveren, en alleen JOIN zonder één van eerder genoemde keywords is automatisch een inner join.

Let op! MySQL kent geen FULL JOIN.

Cross join:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT
    kolomlijst
FROM
    tabelnaam [[AS] alias1]
CROSS JOIN tabelnaam[[AS] alias2]

Opmerking:
Ik heb voor de volledigheid ook een syntax voor een impliciete join aangegeven, en alleen bij een inner join omdat veel db systemen geen implicitie outer joins ondersteunen (en als dat wel zo is verschilt de notatie).
Ik gebruik ze ook nooit, en zal ze in deze tutorial ook niet verder behandelen.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.