Let op: het Venn diagram mag je niet lezen als twee verzamelingen records en hun doorsnede. Het heeft hier een andere betekenis!
Lees ook de commentaar in elk gegeven stukje code! Deze bevat zeer belangrijke informatie.
Syntax
-- dit is niet de enige mogelijkheidSELECT<kolommen uit A of uit B>FROM AINNER JOIN B ONA.Id=B.A_Id-- alternatief waarbij je de volgorde wisselt-- dit mag, want = betekent gewoon "is gelijk aan"-- 2+2 = 4 betekent hetzelfde als 4 = 2+2-- INNER JOIN B ON B.A_Id = A.Id-- alternatief, als A de foreign key bevat:-- INNER JOIN B ON A.B_Id = B.Id-- ook hier kan je de volgorde nog eens omwisselen
Venn diagram inner join
Betekenis
We combineren informatie uit twee tabellen: de linkertabel (A) en de rechtertabel (B). We zeggen dat er overlapping is tussen de tabellen als de gebruikte sleutelkolommen dezelfde waarde bevatten. Het stuk van A dat we bekijken (A.Id) matcht met het stuk van B dat we bekijken (B.A_Id) en dat tekenen we als een overlappend gedeelte.
Als je dat begrepen hebt, zou het je niet mogen verbazen dat je net zo goed B INNER JOIN A kan schrijven als A INNER JOIN B. Enkel bij SELECT * maakt dit een (klein) verschil, namelijk dat de kolommen in een andere volgorde zullen staan.
Voorbeeld
Het diagram met de naam A staat voor de tabel Boeken en met de naam B voor Personen. We veronderstellen dat één auteur meerdere boeken kan hebben maar niet omgekeerd, dus de vreemde sleutel moet wel in Boeken staan. Bij elk boek staat dus een nummer dat uitdrukt: "dit boek is geschreven door persoon nummer ..."
Selecteer alle boeken en toon de voornaam en de familienaam van de auteur.
Elke rij uit de tabel Boeken wordt gecombineerd met elke rij uit de tabel Personen en de combinaties waarin een match wordt gevonden tussen Personen_Id en Personen.Id worden overgehouden. Indien er geen match is wordt de gecombineerde rij genegeerd.
Het resultaat is een nieuwe tabel, dus je kan er verder mee werken zoals je altijd gedaan hebt. We ordenen de lijst op Familienaam, Voornaam, Titel.
Je mag trouwens na FROM een haakje openen en voor ORDER BY het haakje weer sluiten als je dat makkelijker vindt.
We voegen een nieuwe persoon toe in de tabel Personen:
We selecteren alle personen geordend op Familienaam en Voornaam:
En we zien dat Simone De Beauvoir is toegevoegd.
Alle auteurs en hun boeken te selecteren, maar ordenen de lijst nu op Familienaam, Voornaam en Titel:
Nu merken we dat Simone De Beauvoir niet meer in de lijst voorkomt. Dat komt doordat er voor Simone de Beauvoir geen boeken in de boekentabel zijn opgenomen.
Een INNER JOIN gaat alleen die personen tonen waarvoor een match in de tabel Boeken wordt gevonden.
SELECT Personen.Voornaam, Personen.Familienaam,
Boeken.Titel
FROM Boeken
INNER JOIN Personen ON Boeken.Personen_Id = Personen.Id;
SELECT Personen.Voornaam, Personen.Familienaam,
Boeken.Titel
FROM Personen
INNER JOIN Boeken ON Boeken.Personen_Id = Personen.Id
ORDER BY Personen.Voornaam, Personen.Familienaam, Boeken.Titel;
INSERT INTO Personen (
Voornaam,
Familienaam,
AanspreekTitel,
Straat,
Huisnummer,
Stad,
Commentaar,
Biografie
)
VALUES
(
'Simone',
'De Beauvoir',
'Mevrouw',
'Rue Charles De Gaulle',
'38',
'Paris',
'Feministe',
'Compagnon van Jean-Paul Sartre'
);
SELECT * FROM Personen
ORDER BY Familienaam, Voornaam;
SELECT Personen.Voornaam, Personen.Familienaam,
Boeken.Titel
FROM Personen
INNER JOIN Boeken ON Boeken.Personen_Id = Personen.Id
ORDER BY Personen.Familienaam, Personen.Voornaam, Boeken.Titel;