INNER JOIN
De INNER JOIN
maakt het mogelijk om meerdere tabellen met één query te benaderen. Door middel van
relaties worden de records uit meerdere tabellen aan elkaar gekoppeld.
Soms worden er in de verschillende tabellen dezelfde kolomnamen gebruikt. Hierdoor weet SQL niet altijd welke
kolom er precies gebruikt moet worden. Dit is op te lossen door de aanroep van kolomnamen te prefixen.
Zo'n prefix ziet er als volgt uit: Tabelnaam.kolomnaam
. Als een tabelnaam heel lang is, kan er gekozen
worden om een alias te gebruiken.
SELECT Tabelnaam1.kolomnaam, Tabelnaam2.kolomnaam FROM Tabelnaam1 INNER JOIN Tabelnaam2 ON Tabelnaam1.kolomnaam = Tabelnaam2.kolomnaam
INNER JOIN
in de praktijk
De volgende dataset is de inhoud van de tabel Order.
ordernummer, klantid, orderbedrag 1, 1, '23.20' 2, 4, '2.30' 3, 3, '12.93' 4, 4, '54.92' 5, 1, '6.12' 6, 4, '9.60' 7, 5, '15.56'
De volgende dataset is de inhoud van de tabel Klant.
id, voornaam, achternaam, woonplaats 1, 'Henk', 'Janssen', 'Amsterdam' 2, 'Petra', 'de klomp', 'Nijmegen' 3, 'Sjoerd', 'Vermeulen', 'Maastricht' 4, 'Mieke', 'Sterk', 'Amsterdam'
De relatie tussen beide tabellen is gelegd met het veld Order.klantid dat verwijst naar Klant.id
We willen nu een query dat alle informatie ophaalt uit de tabel Persoon en Order. De gegevens worden aan elkaar
gekoppeld door een INNER JOIN
.
SELECT * FROM Persoon INNER JOIN Order ON Persoon.id = Order.klantid
id, voornaam, achternaam, woonplaats, ordernummer, klantid, orderbedrag 1, 'Henk', 'Janssen', 'Amsterdam', 1, 1, '23.20' 1, 'Henk', 'Janssen', 'Amsterdam', 5, 1, '6.12' 3, 'Sjoerd', 'Vermeulen', 'Maastricht', 3, 3, '12.93' 4, 'Mieke', 'Sterk', 'Amsterdam', 2, 4, '2.30' 4, 'Mieke', 'Sterk', 'Amsterdam', 4, 4, '54.92' 4, 'Mieke', 'Sterk', 'Amsterdam', 6, 4, '9.60'
In de resultset is geen rij te vinden met Petra de klomp. Dit komt omdat er in de tabel Order geen record met klant id 2 voorkomt. Er is dus geen verband te leggen tussen een eventuele order en Petra de klomp en daardoor wordt ze niet getoond.
We hebben nu alle records opgehaald, omdat we SELECT *
hebben uitgevoerd. We kunnen uiteraard ook
alleen de kolommen ophalen die we zelf zouden willen. Bijvoorbeeld de voornaam, achternaam en het ordernummer.
SELECT Persoon.voornaam, Persoon.achternaam, Order.ordernummer FROM Persoon INNER JOIN Order ON Persoon.id = Order.klantid
voornaam, achternaam, ordernummer 'Henk', 'Janssen', 1 'Henk', 'Janssen', 5 'Sjoerd', 'Vermeulen', 3 'Mieke', 'Sterk', 2 'Mieke', 'Sterk', 4 'Mieke', 'Sterk', 6