Yhteenveto: Tässä opetusohjelmassa opit, kuinka kysyä tietoja useista taulukoista SQL INNER JOIN -käskyn avulla.
Edellisessä opetusohjelmassa opit, miten tietoja voidaan kysellä yhdestä taulukosta SELECT-käskyn avulla. Haluat kuitenkin usein kysellä tietoja useista taulukoista, jotta analyysille asetettaisiin täydellinen tulosjoukko. Jos haluat kysyä tietoja useista taulukoista, käytä liitoslausekkeita.
SQL tarjoaa useita liitostyyppejä, kuten sisäinen liitos, ulompi liitos (vasen ulompi liitos tai vasen liitos, oikea ulompi liitos tai oikea liitos ja täydellinen ulompi liitos) ) ja itse liittyä. Tässä opetusohjelmassa näytetään, miten INNER JOIN
-lauseketta käytetään.
SQL INNER JOIN -syntaksi
Seuraava kuvaa INNER JOIN
syntaksi kahden taulukon yhdistämiseen:
1
2
3
4
5
|
SELECT
sarake1, sarake2
FROM
table_1
INNER JOIN -taulukko_2 ON join_condition;
|
Tarkastellaan yllä olevaa syntaksia tarkemmin:
-
table_1
jatable_2
kutsutaan yhdistetyiksi taulukoiksi. - Kullekin riville
table_1
-kohdassa kysely löytää vastaavan rivin ryhmästätable_2
, jotka täyttävät liittymisehdot. Jos vastaava rivi löytyy, kysely palauttaa rivin, joka sisältää molempien taulukoiden tietoja. Muussa tapauksessa se tutkiitable_1
-kohdan seuraavan rivin ja tätä prosessia jatketaan, kunnes kaikkitable_1
-rivit tutkitaan.
Yhdistettäessä useampaa kuin kahta taulukkoa, sama logiikka on käytössä.
SQL INNER JOIN -esimerkkejä
SQL INNER JOIN – tietojen kysely kahdesta taulukosta esimerkki
Tässä esimerkissä käytämme products
– ja categories
-taulukoita esimerkkitietokannassa. Seuraava kuva kuvaa tietokantakaaviota.
Yllä olevassa kaaviossa:
- Yhdessä luokassa voi olla useita tuotteita.
- Yksi tuote kuuluu yhteen ja vain yhteen luokkaan.
Siksi -taulukko ja rivit products
-taulukossa. Kahden taulukon välinen linkki on categoryid
-sarake.
Meidän on kysyttävä seuraavia tietoja molemmista taulukoista:
-
productID
,productName
products
-taulukosta. -
categoryName
categories
-taulukosta.
Seuraava kysely noutaa tiedot molemmista taulukoista:
1
2
3
4
5
6
|
VALITSE
tuotetunnus, tuotenimi, luokanNimi
FROM
tuotteet
SISÄINEN LIITTYMINEN
luokat ON categories.categoryID = products.categoryID;
|
Liittymisehto määritetään lausekkeessa INNER JOIN
lausekkeen ON
avainsanan jälkeen lausekkeena:
1
|
categories.categoryID = products.categoryID
|
Jokaiselle riville products
taulukko, kysely löytää vastaavan rivin categories
taulukosta, jolla on sama categoryid.
Jos kahden rivin välillä on molemmat taulukot palauttaa rivin, joka sisältää SELECT-lausekkeessa määritetyt sarakkeet, eli tuotetunnuksen, tuotenimen ja luokan nimen; muuten se tarkistaa products
-taulukon seuraavan rivin löytääksesi vastaavan rivin categories
-taulukosta. Tämä prosessi jatkuu, kunnes tuotetaulukon viimeinen rivi on tutkittu.
SQL INNER JOIN – tietojen kysely kolmesta taulukosta
Voimme käyttää samoja tekniikoita yhdistämällä kolme taulukkoa.Seuraava kysely valitsee productID
, productName
, categoryName
ja supplier
products
, categories
ja suppliers
taulukoista:
1
2
3
4
5
6
7
8
9
10
11
|
VALITSE
tuotetunnus,
tuotenimi,
categoryName,
companyName AS -toimittaja
FROM
-tuotteista
INNER JOIN
-luokat ON-luokissa. categoryID = products.categoryID
INNER JOIN
toimittajat ON toimittajat.supplierID = products.supplierID
|
implisiittinen SQL INNER JOIN
INNER JOIN
-muodossa on toinen muoto, jota kutsutaan implisiittiseksi sisäiseksi liitokseksi alla esitetyllä tavalla:
1
2
3
4
5
6
7
|
SELECT
sarake1, sarake2
FROM
taulukko_1,
taulukko_2
WHERE
join_condition;
|
Tässä muodossa määrität kaikki yhdistetyt taulukot lauseke FROM
ja laita liittymisehto SELECT
-lausekkeen WHERE-lauseeseen. Voimme kirjoittaa yllä olevan kyselyesimerkin uudelleen käyttämällä implisiittistä INNER JOIN
-sovellusta seuraavasti:
1
2
3
4
5
6
7
|
SELECT
productID, productName, categoryName
FROM
tuotteet,
luokat
MISSÄ
tuotteet.categoryID = categories.categoryID;
|