Wanneer u met uw database werkt, moet u mogelijk gegevens uit een paar verschillende tabellen samenstellen. Dit artikel laat je zien hoe.
Ik heb hier en hier al over SQL-joins geschreven, maar laten we eerst even de tijd nemen om te bekijken hoe een join werkt, en met name de syntaxis die specifiek is voor MySQL.
SQL Join-verklaring
Join is een statement waarmee je twee tabellen kunt samenstellen, rijen kunt matchen die aan elkaar gerelateerd zijn, en alleen de rijen kunt behouden die kunnen worden gekoppeld, geen ongepaarde rijen.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
De SELECT ... FROM
statement geeft aan wat de eerste tabel is, waarna de tweede tabelnaam wordt geschreven net na de INNER JOIN
trefwoorden.
Hoe de twee tabellen moeten worden samengevoegd, staat in de ON
uitspraak. In dit geval worden de twee tabellen samengevoegd met behulp van de relatie table1.id = table2.id
.
Het is mogelijk om meerdere join-statements samen te gebruiken om meer dan één tabel tegelijk te joinen.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
Om dat te doen voeg je een tweede INNER JOIN
. toe statement en een tweede ON
statement om de derde tabel en de tweede relatie aan te geven.
Laten we het even hebben over de relaties die u tussen tabellen kunt hebben en waarom u misschien drie tabellen wilt samenvoegen.
Relaties tussen tabellen in SQL
Als je tabellen hebt die aan elkaar gerelateerd zijn, kunnen hun relaties van verschillende typen zijn.
een-op-veel
In een een-op-veel-relatie kan een rij van de eerste tabel worden gerelateerd aan meerdere rijen van de tweede tabel.
In een relationele database kan dit worden geïmplementeerd met de tweede tabel met een first_table_id
kolom die zegt aan welke rij van de eerste tabel die rij gerelateerd is.
veel-op-een
In een veel-op-een-relatie kan één rij van de eerste tabel worden gerelateerd aan één enkele rij van de tweede tabel en kan één rij van de tweede tabel worden gerelateerd aan meerdere rijen van de eerste tabel.
In een relationele database kan dit worden geïmplementeerd met de eerste tabel met een second_table_id
kolom die zegt aan welke rij van de tweede tabel die rij gerelateerd is.
veel-op-veel
In dit geval zijn meerdere rijen gerelateerd aan meerdere rijen.
Dit soort relatie kan niet worden weergegeven zoals bij SQL-tabellen - u moet een koppelingstabel tussen de twee tabellen toevoegen, zodat alleen veel-op-een- en een-op-veel-relaties tussen tabellen aanwezig zijn.
Elke rij van de tabel in het midden vertegenwoordigt één relatie tussen de rijen van de linkertabel en de rijen van de rechtertabel.
In de praktijk zal die middelste tabel in MySQL een kolom hebben voor first_table_id
en een kolom voor second_table_id
, waarbij elke combinatie uniek is.
SQL-tabellen in de praktijk samenvoegen
Laten we ons voorstellen dat we de database van een organisatie hebben, waar we een tabel hebben met teams (hun naam en andere identificatiegegevens), en een tabel met projecten (naam, voortgang, enzovoort).
id | team_name | specialiteit |
---|---|---|
1 | Banaanwerpers | Bananen |
2 | Houtknaagdieren | Knagen op hout |
3 | De roze olifanten | Op de grond stampen |
4 | Pluizige aardappelen | Werken en slapen |
id | projectnaam | vooruitgang |
---|---|---|
1 | Dam bouwen | Nog wat hout knagen en grond stampen nodig |
2 | Bananentaart | Iemand eet alle bananen op |
3 | Slaaponderzoek | Te veel slapen, niet genoeg onderzoek |
Omdat een team aan meerdere projecten kan werken en aan een project door meerdere teams kan worden gewerkt, is er ook een derde tabel die team-projectwedstrijden bijhoudt.
project_id | group_id |
---|---|
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
We kunnen een JOIN
. gebruiken verklaring om alles samen te voegen wanneer we de informatie uit de tabellen op een voor mensen leesbare manier moeten bekijken, zoals deze:
SELECT
teams.team_name AS team_name,
projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
ON teams.id = matches.team_id
INNER JOIN matches
ON matches.project_id = projects.id
ORDER BY teams.id;
We kiezen welke kolommen uit elke tabel worden weergegeven met een SELECT
verklaring.
We specificeren hoe de rijen van de tabellen gecombineerd moeten worden met een ON
verklaring.
En we ordenen de rijen op de manier die we willen met een ORDER BY
verklaring.
De ON
statements teams.id = matches.team_id
en matches.projects_id = projects.id
betekent dat de rijen worden gecombineerd met behulp van de rijen van de matches
tafel. Elke rij van de uitvoertabel heeft de projectnaam en de teamnaam gecombineerd met behulp van de paren project-ID en team-ID in de matches
tafel.
De uitvoertabel ziet er als volgt uit.
Teamnaam | Projectnaam |
---|---|
Banaanwerpers | Bananentaart |
Banaanwerpers | Slaaponderzoek |
Houtknaagdieren | Dambulding |
Houtknaagdieren | Slaaponderzoek |
De roze olifanten | Damgebouw |
De roze olifanten | Damgebouw |
Pluizige aardappelen | Slaaponderzoek |
Er is geen kolom rechtstreeks uit de matches
tafel. De matches
tabel wordt niet weergegeven in de uitvoer, maar wordt gebruikt als instructies voor het combineren van de rijen van de teams
en projects
tabellen.
Conclusie
De JOIN
statement kunt u een of meer tabellen samenvoegen. Het moet worden gebruikt in combinatie met de ON
statement om de relatie tussen de rijen van een tabel en de rijen van een andere tabel te bepalen.
In dit artikel heb je geleerd hoe je de JOIN
. gebruikt statement om drie verschillende tabellen samen te voegen.