Sammendrag: i denne opplæringen lærer du hvordan du spør etter data fra flere tabeller ved hjelp av SQL INNER JOIN-setning.
I forrige opplæring lærte du hvordan du kan spørre om data fra en enkelt tabell ved hjelp av SELECT-setningen. Imidlertid vil du ofte spørre data fra flere tabeller for å få et komplett resultatsett for analyse. For å spørre om data fra flere tabeller bruker du sammenføyningsuttalelser.
SQL gir flere typer sammenføyninger som indre sammenføyning, ytre sammenføyning (venstre ytre sammenføyning eller venstre sammenføyning, høyre ytre sammenføyning eller høyre sammenføyning og full ytre sammenføyning ) og selv bli med. I denne opplæringen vil vi vise deg hvordan du bruker INNER JOIN
klausul.
SQL INNER JOIN syntaks
Følgende illustrerer INNER JOIN
syntaks for sammenføyning av to tabeller:
1
2
3
4
5
|
VELG
kolonne1, kolonne2
FRA
tabell_1
INNRE JOIN tabell_2 PÅ join_condition;
|
La oss undersøke syntaksen ovenfor mer detaljert:
-
table_1
ogtable_2
kalles sammenføyde tabeller. - For hver rad i
table_1
finner spørringen den tilsvarende raden itable_2
som oppfyller tilknytningsbetingelsen. Hvis den tilsvarende raden ble funnet, returnerer spørringen en rad som inneholder data fra begge tabellene. Ellers undersøker den neste rad itable_1
, og denne prosessen fortsetter til alle radene itable_1
blir undersøkt.
For å bli med i flere enn to tabeller, ble den samme logikken brukt.
Eksempler på SQL INNER JOIN
SQL INNER JOIN – spørring av data fra to tabelleksempler
I dette eksemplet bruker vi tabellene products
og categories
i eksempeldatabasen. Følgende bilde illustrerer databasediagrammet.
I diagrammet ovenfor:
- En kategori kan ha mange produkter.
- Ett produkt tilhører en og én kategori.
Derfor er det et mange-til-ett forhold mellom radene i categories
tabell og rader i products
tabellen. Koblingen mellom de to tabellene er categoryid
-kolonnen.
Vi må spørre følgende data fra begge tabellene:
-
productID
,productName
fraproducts
-tabellen. -
categoryName
fracategories
tabellen.
Følgende spørring henter data fra begge tabellene:
1
2
3
4
5
6
|
VELG
productID, productName, categoryName
FRA
produkter
INNRE MEDLEM
kategorier PÅ kategorier.categoryID = products.categoryID;
|
Tilkoblingsbetingelsen er spesifisert i INNER JOIN
-klausulen etter ON
nøkkelordet som uttrykk:
1
|
categories.categoryID = products.categoryID
|
For hver rad i products
tabell, finner spørringen en tilsvarende rad i categories
tabellen som har samme categoryid.
Hvis det er samsvar mellom to rader i begge tabellene, returnerer den en rad som inneholder kolonner spesifisert i SELECT-setningen, dvs. produkt-ID, produktnavn og kategorinavn; Ellers sjekker den neste rad i products
-tabellen for å finne den samsvarende raden i categories
-tabellen. Denne prosessen fortsetter til den siste raden i produkttabellen er undersøkt.
SQL INNER JOIN – spørring av data fra tre tabeller
Vi kan bruke de samme teknikkene for å bli med i tre tabeller.Følgende spørsmål velger productID
, productName
, categoryName
og supplier
fra products
, categories
og suppliers
tabellene:
1
2
3
4
5
6
7
8
9
10
11
|
VELG
productID,
productName,
categoryName,
companyName AS leverandør
FRA
produkter
INNRE JOIN
kategorier PÅ kategorier. categoryID = products.categoryID
INNRE MEDLEM
leverandører PÅ leverandører.supplierID = products.supplierID
|
Implisitt SQL INNER JOIN
Det er en annen form for INNER JOIN
kalt implisitt indre sammenføyning som vist nedenfor:
1
2
3
4
5
6
7
|
VELG
kolonne1, kolonne2
FRA
tabell_1,
tabell_2
HVOR
join_condition;
|
I dette skjemaet angir du alle sammenføyde tabeller i FROM
klausulen og sett sammenkoblingsbetingelsen i WHERE klausul i SELECT
uttalelsen. Vi kan omskrive spørreeksemplet ovenfor ved å bruke den implisitte INNER JOIN
som følger:
1
2
3
4
5
6
7
|
VELG
productID, productName, categoryName
FRA
produkter,
kategorier
HVOR
products.categoryID = categories.categoryID;
|