SQL en het gebruik van JOIN
Binnen SQL heb je verschillende manieren om tabellen met elkaar te koppelen om zo data uit beide tabellen terug te krijgen in de resultaten. Maar wat houdt elk van deze joins in?
Verschillende typen
Er zijn verschillende typen binnen SQL die je kunt gebruiken. Binnen het combineren van tabellen door middel van een join wordt er vaak gespreken over de linker en de rechter tabel. Dit maakt het makkelijker om uit te leggen wat een join precies doet en zal ook in deze blog terugkomen.
Elk type zal besproken worden en verder uitgelegd met behulp van een voorbeeld.
In het voorbeeld zullen we telkens gebruik maken van de volgende testtabellen:
Inner Join
De eerste JOIN die we bespreken is de Inner Join. Stel, we willen weten welke producten er zijn besteld, dan maken we gebruik van de inner join:
Dit geeft het volgende resultaat:
Je ziet dat alle orders terugkomen met daaraan gekoppeld de bestelde producten. We kunnen hier ook nog zeggen dat we een overzicht terug willen krijg van totale orderprijs per product:
Dit geeft het volgende resultaat:
Hier zijn dezelfde producten gegroepeerd en kunnen we per productgroep zien hoeveel de totale orderwaarde is geweest.
Een inner join geeft alle records terug die in zowel de linker als de rechter tabel voorkomen. Als we een inner join willen visualiseren dan ziet deze er als volgt uit:
Het blauwe gedeelte wordt teruggegeven door de query.
Left Join
Bij een left join worden alle rijen teruggegeven in de linker tabel, ook al deze geen overeenkomend record hebben in de rechter tabel. In ons voorbeeld is de producten tabel de linker tabel en de order tabel de rechter tabel. Laten we zeggen dat we alle producten terug willen hebben in een query en als producten een order hebben willen we ook het order ID hiervan terugkrijgen:
Dit geeft het volgende resultaat:
Je ziet hier alle producten terugkomen ook al zijn er geen orders aan gekoppeld. Hier is orderID dan ook NULL. Als we deze join visualiseren dan ziet dit er als volgt uit:
We kunnen ook zeggen geef alle producten terug die helemaal geen order hebben. Deze query ziet er als volgt uit:
Met als resultaat:
Dit kunnen we als volgt visualiseren:
Right Join
De right join doet het tegenovergestelde van een left join en geeft records terug die in de rechter tabel voorkomen ook al komen deze niet in de linker tabel terug:
Dit geeft als resultaat:
Met als visualisatie:
En ook hier kunnen we weer zeggen dat we de records uit willen sluiten die ook in de linker tabel terugkomen:
In ons voorbeeld geeft dit een leeg resultaat terug, want aan alle orders is een product gekoppeld.
Dit geeft als visualisatie:
Full Join
Als laatste hebben we de full join, alle records uit beide tabellen:
Met als resultaat:
En als visualisatie:
Ook hier kunnen we weer een where statement toevoegen die de rijen uitsluit dit in beide tabellen voorkomen:
Hier krijgen we alleen de prodcuten terig die niet in een order voorkomen:
Met als visualisatie:
Lees ook deze blog over joins, waar ook outer en cross join in worden besproken.