De database transacties bestaat uit meerdere tabellen. Dat is niet zomaar gebeurd. Je weet dat er goede redenen zijn om de informatie te spreiden over verschillende tabellen. In de vorige onderdelen heb je geleerd hoe je met behulp van SQL informatie kunt halen uit één tabel. Om een antwoord op een vraag te krijgen, zal het vaak nodig zijn om de informatie uit meerdere tabellen te combineren. In een relationele database worden twee tabellen gecombineerd tot een nieuwe tabel door ze te koppelen (in het Engels: join). Als je daarbij niet oppast, kan dat tot vreemde resultaten leiden.
We nemen als voorbeeld de administratie van een buurtvereniging. Die bestaat uit twee tabellen: leden en kinderen.
Om een uitnodiging te maken voor een spelletjesmiddag wil de organisatie een lijst van de roepnamen van de kinderen, hun achternamen en adressen hebben.
In een SQL-query geef je bij FROM aan welke tabellen geraadpleegd moeten worden. Als je meer dan één tabel opgeeft, worden de tabellen eerst gecombineerd tot één tabel. Daarna wordt die combinatietabel gebruikt om de gewenste informatie te vinden.
De volgende query heeft als resultaat een combinatietabel:
SELECT roepnaam, naam, adres,
FROM leden, kinderen;
Het resultaat van de query op de vorige pagina zal niet de lijst
opleveren die de organisatie van de spelletjesmiddag had beoogd:
In deze lijst zijn alle mogelijke combinaties van rijen uit de twee tabellen afgedrukt: ieder kind wordt drie keer afgedrukt: een keer met zijn eigen achternaam en adres en daarnaast met de namen en adressen van de andere leden.
Dit levert dus 4 x 3 is 12 rijen op.
Als er vijftig gezinnen lid zijn van de buurtvereniging en die gezinnen samen honderd kinderen hebben, dan levert deze query 50 x 100 = 5000 rijen op in de combinatietabel waarvan de meeste rijen geen relevante informatie opleveren.
De organisatie wil alleen de combinatie van de roepnaam bij de juiste achternaam en adres. Daarvoor zoeken we in de beide tabellen naar iets gemeenschappelijks. In dit voorbeeld is dat de kolom lidnr. Wanneer voor een rij geldt dat het lidnummer in de tabel leden gelijk is aan het lidnr in de tabel kinderen dan zal het een gewenste combinatie opleveren. In de SQL-opdracht komt deze voorwaarde achter de WHERE‑component te staan:
SELECT roepnaam, naam, adres
FROM leden, kinderen
WHERE leden.lidnr = kinderen.lidnr;
In de WHERE-component komt twee keer de kolom lidnr voor.
Om duidelijk te maken welke kolom je bedoelt, zet je voor de kolomnaam de naam van de tabel en een punt. De aanduiding van een kolom heeft een basisstructuur: tabelnaam.kolomnaam .
In dit voorbeeld staat de informatie die je wilt hebben in twee tabellen verspreid. Het kan ook voorkomen dat je drie of meer tabellen moet gebruiken om de informatie te krijgen, die je wilt hebben. In dat geval zet je achter de FROM-component de namen van de tabellen en koppel je achter de WHERE-component de tabellen
twee aan twee.