Oversigt: i denne vejledning lærer du, hvordan du forespørger om data fra flere tabeller ved hjælp af SQL INNER JOIN-sætning.
I den foregående vejledning lærte du, hvordan du forespørger om data fra en enkelt tabel ved hjælp af SELECT-sætningen. Du vil dog ofte forespørge på data fra flere tabeller for at få et komplet resultatsæt til analyse. For at forespørge på data fra flere tabeller bruger du sammenføjningsudsagn.
SQL leverer flere typer sammenføjninger såsom indre sammenføjning, ydre sammenføjning (venstre ydre sammenføjning eller venstre sammenføjning, højre ydre sammenføjning eller højre sammenføjning og fuld ydre sammenføjning ) og selv deltage. I denne vejledning viser vi dig, hvordan du bruger INNER JOIN
-klausulen.
SQL INNER JOIN syntaks
Følgende illustrerer INNER JOIN
syntaks til sammenføjning af to tabeller:
1
2
3
4
5
|
VÆLG
kolonne1, kolonne2
FRA
tabel_1
INNRE JOIN-tabel_2 PÅ join_condition;
|
Lad os undersøge syntaksen ovenfor mere detaljeret:
-
table_1
ogtable_2
kaldes sammenføjede tabeller. - For hver række i
table_1
finder forespørgslen den tilsvarende række itable_2
, der opfylder sammenføjningsbetingelsen. Hvis den tilsvarende række blev fundet, returnerer forespørgslen en række, der indeholder data fra begge tabeller. Ellers undersøger den næste række itable_1
, og denne proces fortsætter, indtil alle rækkerne itable_1
er undersøgt.
For at slutte sig til mere end to tabeller anvendte den samme logik.
Eksempler på SQL INNER JOIN
SQL INNER JOIN – forespørgsel på data fra to tabelleeksempler
I dette eksempel bruger vi products
og categories
tabellerne i eksempeldatabasen. Følgende billede illustrerer databasediagrammet.
I diagrammet ovenfor:
- En kategori kan have mange produkter.
- Et produkt hører til en og kun en kategori.
Derfor er der et mange-til-en forhold mellem rækkerne i categories
tabel og rækker i products
tabellen. Forbindelsen mellem de to tabeller er categoryid
-kolonnen.
Vi skal spørge følgende data fra begge tabeller:
-
productID
,productName
fraproducts
-tabellen. -
categoryName
fracategories
-tabellen.
Den følgende forespørgsel henter data fra begge tabeller:
1
2
3
4
5
6
|
VÆLG
productID, productName, categoryName
FRA
produkter
INNRE MEDLEM
kategorier PÅ kategorier.categoryID = products.categoryID;
|
Forbindelsesbetingelsen er specificeret i INNER JOIN
-klausulen efter ON
nøgleordet som udtryk:
1
|
categories.categoryID = products.categoryID
|
For hver række i products
tabel, finder forespørgslen en tilsvarende række i categories
-tabellen, der har den samme categoryid.
Hvis der er et match mellem to rækker i begge tabeller returnerer den en række, der indeholder kolonner, der er specificeret i SELECT-klausulen, dvs. produkt-id, produktnavn og kategorinavn; Ellers kontrolleres den næste række i products
-tabellen for at finde den matchende række i categories
-tabellen. Denne proces fortsætter, indtil den sidste række i produkttabellen undersøges.
SQL INNER JOIN – forespørgsel på data fra tre tabeller
Vi kan bruge de samme teknikker til at forbinde tre tabeller.Følgende forespørgsel vælger productID
, productName
, categoryName
og supplier
fra products
, categories
og suppliers
tabellerne:
1
2
3
4
5
6
7
8
9
10
11
|
VÆLG
productID,
productName,
categoryName,
firmanavn AS leverandør
FRA
produkter
INNRE MEDLEM
kategorier ON kategorier. categoryID = products.categoryID
INNRE MEDLEM
leverandører PÅ leverandører.supplierID = products.supplierID
|
Implicit SQL INNER JOIN
Der er en anden form for INNER JOIN
kaldet implicit indre sammenføjning som vist nedenfor:
1
2
3
4
5
6
7
|
VÆLG
kolonne1, kolonne2
FRA
tabel_1,
tabel_2
HVOR
join_condition;
|
I denne form angiver du alle sammenføjede tabeller i FROM
-klausulen og sætte sammenkædningsbetingelsen i WHERE-klausul i SELECT
-erklæringen. Vi kan omskrive forespørgselseksemplet ovenfor ved hjælp af den implicitte INNER JOIN
som følger:
1
2
3
4
5
6
7
|
VÆLG
productID, productName, categoryName
FRA
produkter,
kategorier
HVOR
products.categoryID = categories.categoryID;
|