Når du arbejder med din database, skal du muligvis sammensætte data fra et par forskellige tabeller. Denne artikel viser dig hvordan.
Jeg har allerede skrevet om SQL joins her og her, men lad os tage et øjeblik på at gennemgå, hvordan en join fungerer først, og især syntaksen, der er specifik for MySQL.
SQL Join Statement
Join er en erklæring, der lader dig sammensætte to tabeller, der matcher rækker, der er relateret til hinanden, og kun beholder de rækker, der kan matches, ikke at beholde uparrede rækker.
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
SELECT ... FROM
sætning angiver, hvilken der er den første tabel, så skrives det andet tabelnavn lige efter INNER JOIN
søgeord.
Hvordan de to tabeller skal forbindes er skrevet i ON
udmelding. I dette tilfælde er de to tabeller forbundet ved hjælp af forholdet table1.id = table2.id
.
Det er muligt at bruge flere join-sætninger sammen for at forbinde mere end én tabel på samme tid.
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3
ON table2.id = table3.id;
For at gøre det tilføjer du endnu en INNER JOIN
sætning og en anden ON
sætning for at angive den tredje tabel og den anden relation.
Lad os tale et øjeblik om de relationer, du kan have mellem tabeller, og hvorfor du måske ønsker at slå tre tabeller sammen.
Relationer mellem tabeller i SQL
Når du har tabeller, der er relateret til hinanden, kan deres relationer være en af forskellige typer.
en-til-mange
I en en-til-mange-relation kan én række i den første tabel relateres til flere rækker i den anden tabel.
I en relationsdatabase kan dette implementeres med den anden tabel med et first_table_id
kolonne, der siger, hvilken række i den første tabel den række er relateret til.
mange-til-en
I et mange-til-en-forhold kan en række i den første tabel være relateret til en enkelt række i den anden tabel, og en række i den anden tabel kan relateres til flere rækker i den første tabel.
I en relationsdatabase kan dette implementeres med den første tabel med et second_table_id
kolonne, der siger, hvilken række i den anden tabel den række er relateret til.
mange-til-mange
I dette tilfælde er flere rækker relateret til flere rækker.
Denne form for relation kan ikke repræsenteres, som den er med SQL-tabeller – du skal tilføje en koblingstabel mellem de to tabeller, så kun mange-til-en og en-til-mange relationer er til stede mellem tabeller.
Hver række i tabellen i midten repræsenterer ét forhold mellem rækkerne i den venstre tabel og og rækkerne i den højre tabel.
I praksis i MySQL vil den midterste tabel have en kolonne for first_table_id
og en kolonne for second_table_id
, hvor hver kombination er unik.
Sammenslutning af SQL-tabeller i praksis
Lad os forestille os, at vi har en organisations database, hvor vi har en tabel med teams (deres navn og andre identificerende oplysninger) og en tabel med projekter (navn, fremskridt og så videre).
id | team_name | speciale |
---|---|---|
1 | Banankastere | Bananer |
2 | Trægnavere | Gnave på træ |
3 | De lyserøde elefanter | Tramper i jorden |
4 | Fluffy kartofler | Arbejde og sove |
id | projektnavn | fremskridt |
---|---|---|
1 | Dæmningsbygning | Noget mere trægnav og jordtrampning påkrævet |
2 | Banankage | Nogen spiser alle bananerne |
3 | Søvnundersøgelse | For meget søvn ikke nok research |
Da et team kan arbejde på flere projekter, og et projekt kan arbejdes på af flere teams, er der også en tredje tabel, der holder styr på team-projektkampe.
projekt-id | gruppe_id |
---|---|
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
Vi kan bruge en JOIN
erklæring for at sætte alt sammen, når vi skal se informationen fra tabellerne på en menneskelig læsbar måde, som denne:
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;
Vi vælger, hvilke kolonner der skal vises fra hver tabel med en SELECT
erklæring.
Vi specificerer, hvordan rækkerne i tabellerne skal kombineres med en ON
erklæring.
Og vi bestiller rækkerne på den måde, vi foretrækker med en ORDER BY
erklæring.
ON
udsagn teams.id = matches.team_id
og matches.projects_id = projects.id
betyder, at rækkerne kombineres ved hjælp af rækkerne i matches
bord. Hver række i outputtabellen har projektnavnet og teamnavnet kombineret ved hjælp af parrene af projekt-id og team-id i matches
tabel.
Outputtabellen vil se ud som nedenfor.
Team_name | Projektnavn |
---|---|
Banankastere | Banankage |
Banankastere | Søvnforskning |
Trægnavere | Dam Bulding |
Trægnavere | Søvnforskning |
De lyserøde elefanter | Dæmningsbygning |
De lyserøde elefanter | Dæmningsbygning |
Fluffy kartofler | Søvnforskning |
Der er ingen kolonne direkte fra matches
bord. matches
tabellen vises ikke i outputtet, men den bruges som instruktioner til, hvordan man kombinerer rækkerne i teams
og projects
tabeller.
Konklusion
JOIN
sætning lader dig samle en eller flere tabeller. Den skal bruges sammen med ON
sætning for at bestemme forholdet mellem rækkerne i en tabel og rækkerne i en anden tabel.
I denne artikel har du lært, hvordan du bruger JOIN
sætning for at samle tre forskellige tabeller.