Sammanfattning: i den här självstudien lär du dig hur du frågar om data från flera tabeller med hjälp av SQL INNER JOIN-uttalande.
I föregående handledning lärde du dig att fråga data från en enda tabell med SELECT-satsen. Men du vill ofta fråga data från flera tabeller för att få en fullständig resultatuppsättning för analys. För att fråga data från flera tabeller använder du kopplingsuttalanden.
SQL tillhandahåller flera typer av kopplingar, t.ex. inre koppling, yttre koppling (vänster yttre koppling eller vänster koppling, höger yttre koppling eller höger koppling och fullständig yttre koppling ) och själv gå med. I denna handledning visar vi dig hur du använder INNER JOIN
-satsen.
SQL INNER JOIN syntax
Följande illustrerar INNER JOIN
syntax för sammanfogning av två tabeller:
1
2
3
4
5
|
VÄLJ
kolumn1, kolumn2
FRÅN
tabell_1
INNRE GÅ MED tabell_2 PÅ join_condition;
|
Låt oss granska syntaxen ovan mer detaljerat:
-
table_1
ochtable_2
kallas förenade tabeller. - För varje rad i
table_1
hittar sökningen motsvarande rad itable_2
som uppfyller kopplingsvillkoret. Om motsvarande rad hittades returnerar frågan en rad som innehåller data från båda tabellerna. Annars undersöks nästa rad itable_1
, och denna process fortsätter tills alla rader itable_1
undersöks.
För att gå med i mer än två tabeller tillämpades samma logik.
Exempel på SQL INNER JOIN
SQL INNER JOIN – fråga information från två tabellsexempel
I det här exemplet använder vi products
och categories
tabellerna i exempeldatabasen. Följande bild illustrerar databasdiagrammet.
I diagrammet ovan:
- En kategori kan ha många produkter.
- En produkt tillhör en och en kategori.
Därför finns det ett många-till-ett-förhållande mellan raderna i categories
tabell och rader i products
tabellen. Länken mellan de två tabellerna är categoryid
-kolumnen.
Vi måste fråga följande data från båda tabellerna:
-
productID
,productName
frånproducts
-tabellen. -
categoryName
fråncategories
tabellen.
Följande fråga hämtar data från båda tabellerna:
1
2
3
4
5
6
|
VÄLJ
produktID, produktnamn, kategorinamn
FRÅN
produkter
INNRE GÅNG
kategorier PÅ kategorier.categoryID = products.categoryID;
|
Kopplingsvillkoret anges i INNER JOIN
-klausulen efter ON
nyckelordet som uttrycket:
1
|
categories.categoryID = products.categoryID
|
För varje rad i products
tabell hittar frågan en motsvarande rad i categories
tabellen som har samma categoryid.
Om det finns en matchning mellan två rader i båda tabellerna returnerar en rad som innehåller kolumner som anges i SELECT-satsen, dvs. produkt-id, produktnamn och kategorinamn; annars kontrollerar den nästa rad i products
-tabellen för att hitta matchande rad i categories
-tabellen. Denna process fortsätter tills den sista raden i produkttabellen undersöks.
SQL INNER JOIN – fråga information från tre tabeller
Vi kan använda samma tekniker för att sammanfoga tre tabeller.Följande fråga väljer productID
, productName
, categoryName
och supplier
från products
, categories
och suppliers
tabeller:
1
2
3
4
5
6
7
8
9
10
11
|
VÄLJ
productID,
produktnamn,
categoryName,
companyName AS leverantör
FRÅN
produkter
INNRE GÅ MED
kategorier PÅ kategorier. categoryID = products.categoryID
INNRE GÅ MED
leverantörer PÅ leverantörer.supplierID = products.supplierID
|
Implicit SQL INNER JOIN
Det finns en annan form av INNER JOIN
kallad implicit inner join som visas nedan:
1
2
3
4
5
6
7
|
VÄLJ
kolumn1, kolumn2
FRÅN
tabell_1,
tabell_2
VAR
join_condition;
|
I det här formuläret anger du alla sammanfogade tabeller i FROM
-satsen och sätta kopplingsvillkoret i WHERE-satsen i SELECT
-uttalandet. Vi kan skriva om frågeexemplet ovan med det implicita INNER JOIN
enligt följande:
1
2
3
4
5
6
7
|
VÄLJ
productID, productName, categoryName
FRÅN
produkter,
kategorier
VAR
products.categoryID = categories.categoryID;
|