JOIN on SQL -kielen operaattori, joka on relaatioalgebran liitosoperaation toteutus . Sisältyy SELECT- , UPDATE- ja DELETE - käskyjen FROM-lauseeseen .
Liitosoperaatio, kuten muutkin binäärioperaatiot , on suunniteltu hakemaan tietoja kahdesta taulukosta ja sisällyttämään tiedot yhteen tulosjoukkoon. Liitostoiminnan tunnusmerkit ovat seuraavat:
Sen määrittäminen, mitkä lähdemerkkijonot sisällytetään tulokseen ja missä yhdistelmissä, riippuu liitosoperaation tyypistä ja nimenomaisesti määritetystä liitosehdosta . Liitosehto, eli ehto lähdetaulukoiden rivien yhteensovittamisesta keskenään, on looginen lauseke ( predikaatti ).
Jos ei tarvitse yhdistää kahta, vaan useampaa taulukkoa, yhdistämistoimintoa käytetään useita kertoja (peräkkäin).
SQL JOIN -operaatio on relaatioalgebran liitosoperaation toteutus vain jossain määrin, koska relaatiotietomallissa liitos suoritetaan relaatioille, jotka ovat joukkoja ja SQL:ssä taulukoille, jotka ovat multijoukkoja . Myös operaatioiden tulokset ovat yleisesti ottaen erilaisia: relaatioalgebrassa liitoksen tulos antaa suhteen (set), ja SQL:ssä taulukon (multiset).
Useimmissa DBMS-järjestelmissä sanoja LEFT, RIGHTmääritettäessä FULLsana OUTERvoidaan jättää pois. Sana INNERvoidaan myös jättää pois useimmista DBMS-järjestelmistä.
Yleisessä tapauksessa DBMS tarkistaa ehdon ( predikaatti ) yhteyden muodostaessaan . Jos sarakkeiden nimet, joilla taulukot on yhdistetty, ovat samat, voit käyttää sen sijaan . Ehtoa ei ole määritelty. ONUSINGCROSS JOIN
Ristiliitokseen (Carteesinen tuote) CROSS JOINjotkin SQL-toteutukset käyttävät pilkkuoperaattoria ( , ):
FROM Table1 , Taulukko 2Seuraavia taulukoita käytetään lisäselvityksessä:
Kaupunki (kaupungit)ID | Nimi |
---|---|
yksi | Moskova |
2 | Pietari |
3 | Kazan |
Nimi | Kaupunkitunnus |
---|---|
Andrew | yksi |
Leonid | 2 |
Sergei | yksi |
Gregory | neljä |
Sisäliitosoperaattori yhdistää INNER JOIN kaksi taulukkoa. Operaattorin taulukoiden järjestyksellä ei ole merkitystä, koska operaattori on kommutoiva .
Tulostaulukon otsikko on yhdistettyjen taulukoiden otsikoiden liitto ( ketjutus ).
Tuloksen runko muodostetaan loogisesti seuraavasti. Yhden taulukon jokaista riviä verrataan toisen taulukon jokaiseen riviin, minkä jälkeen liitosehto tarkistetaan tuloksena olevan "liitetyn" rivin osalta (liitospredikaatti lasketaan). Jos ehto on tosi, vastaava "liitetty" rivi lisätään tulostaulukkoon.
Kuvattu toimintoalgoritmi on tiukasti looginen, eli se selittää vain tuloksen, joka tulisi saada toimintoa suoritettaessa, mutta ei edellytä, että tietty DBMS suorittaa yhteyden määritetyllä tavalla. Liitosoperaatiota voidaan toteuttaa useilla tavoilla, esimerkiksi sisäkkäiset silmukat join ( eng. inner loops join ), hash join ( eng. hash join ), yhdistäminen ( eng. merge join ). Ainoa vaatimus on, että minkä tahansa toteutuksen tulee tuottaa loogisesti sama tulos kuin kuvattua algoritmia sovellettaessa.
VALITSE * Henkilöltä SISÄINEN LIITTY Kaupunki ON Henkilö . _ CityId = kaupunki . IDTulos:
Henkilö.Nimi | Henkilö.Kaupunkitunnus | City.Id | Kaupungin nimi |
---|---|---|---|
Andrew | yksi | yksi | Moskova |
Leonid | 2 | 2 | Pietari |
Sergei | yksi | yksi | Moskova |
Kahden taulukon välinen liitos, joka sisältää välttämättä kaikki rivit joko yhdessä tai molemmissa taulukoissa.
LEFT OUTTER JOINVasen ulompi liitosoperaattori LEFT OUTER JOIN yhdistää kaksi pöytää. Taulukoiden järjestys operaattorille on tärkeä, koska operaattori ei ole kommutoiva .
Tulostaulukon otsikko on yhdistettyjen taulukoiden otsikoiden liitto ( ketjutus ).
Tuloksen runko muodostetaan loogisesti seuraavasti. Olkoon vasen ja oikea taulukko yhdistetty predikaatilla (ehto) p .
Tulos:
Henkilö.Nimi | Henkilö.Kaupunkitunnus | City.Id | Kaupungin nimi |
---|---|---|---|
Andrew | yksi | yksi | Moskova |
Leonid | 2 | 2 | Pietari |
Sergei | yksi | yksi | Moskova |
Gregory | neljä | TYHJÄ | TYHJÄ |
Oikea ulompi liitosoperaattori RIGHT OUTER JOIN yhdistää kaksi pöytää. Taulukoiden järjestys operaattorille on tärkeä, koska operaattori ei ole kommutoiva .
Tulostaulukon otsikko on yhdistettyjen taulukoiden otsikoiden liitto ( ketjutus ).
Tuloksen runko muodostetaan loogisesti seuraavasti. Olkoon vasen ja oikea taulukko yhdistetty predikaatilla (ehto) p .
Tulos:
Henkilö.Nimi | Henkilö.Kaupunkitunnus | City.Id | Kaupungin nimi |
---|---|---|---|
Andrew | yksi | yksi | Moskova |
Sergei | yksi | yksi | Moskova |
Leonid | 2 | 2 | Pietari |
TYHJÄ | TYHJÄ | 3 | Kazan |
Täysi ulompi liitosoperaattori FULL OUTER JOIN yhdistää kaksi pöytää. Operaattorin taulukoiden järjestyksellä ei ole merkitystä, koska operaattori on kommutoiva .
Tulostaulukon otsikko on yhdistettyjen taulukoiden otsikoiden liitto ( ketjutus ).
Tuloksen runko muodostetaan loogisesti seuraavasti. Yhdistetään ensimmäinen ja toinen taulukko predikaatilla (ehto) p . Sanat "ensimmäinen" ja "toinen" eivät osoita lausekkeen kirjoitusjärjestystä (mikä ei ole tärkeää), vaan niitä käytetään vain erottamaan taulukot toisistaan.
Tulos:
Henkilö.Nimi | Henkilö.Kaupunkitunnus | City.Id | Kaupungin nimi |
---|---|---|---|
Andrew | yksi | yksi | Moskova |
Sergei | yksi | yksi | Moskova |
Leonid | 2 | 2 | Pietari |
TYHJÄ | TYHJÄ | 3 | Kazan |
Gregory | neljä | TYHJÄ | TYHJÄ |
Ristiliitosoperaattori tai karteesinen tuote yhdistää kaksi taulukkoa. Operaattorin taulukoiden järjestyksellä ei ole merkitystä, koska operaattori on kommutoiva . CROSS JOIN
Tulostaulukon otsikko on yhdistettyjen taulukoiden otsikoiden liitto ( ketjutus ).
Tuloksen runko muodostetaan loogisesti seuraavasti. Jokainen yhden taulukon rivi on yhdistetty toisen taulukon jokaiseen riviin, jolloin tuloksena saadaan kaikki mahdolliset kahden taulukon rivien yhdistelmät.
VALITSE * FROM henkilöstä RISTÄ LIITTY Kaupunkitai
SELECT * FROM henkilö , kaupunkiTulos:
Henkilö.Nimi | Henkilö.Kaupunkitunnus | City.Id | Kaupungin nimi |
---|---|---|---|
Andrew | yksi | yksi | Moskova |
Andrew | yksi | 2 | Pietari |
Andrew | yksi | 3 | Kazan |
Leonid | 2 | yksi | Moskova |
Leonid | 2 | 2 | Pietari |
Leonid | 2 | 3 | Kazan |
Sergei | yksi | yksi | Moskova |
Sergei | yksi | 2 | Pietari |
Sergei | yksi | 3 | Kazan |
Gregory | neljä | yksi | Moskova |
Gregory | neljä | 2 | Pietari |
Gregory | neljä | 3 | Kazan |
Jos lisäät liitosehdon (predikaatti p ) WHERE-lauseeseen , eli rajoitukset monikkoyhdistelmille, tulos vastaa operaatiota , jolla on sama ehto: INNER JOIN
SELECT * FROM henkilö , kaupunki WHERE Henkilö . CityId = kaupunki . IDNäin ollen lausekkeet t1, t2 WHERE pja t1 INNER JOIN t2 ON povat syntaktisesti vaihtoehtoisia muotoja kirjoittaa sama looginen sisäliitosoperaatio predikaatille p . Liitostoiminnon syntaksin CROSS JOIN + WHEREsanotaan olevan vanhentunut ja vanhentunut SQL ANSI [1] [2] -standardin mukaan .
SQL | |
---|---|
Versiot |
|
Avainsanat | |
Aiheeseen liittyvät artikkelit | |
ISO/IEC SQL:n osat |
|
Tietokanta | |
---|---|
Käsitteet |
|
Objektit |
|
Avaimet | |
SQL | |
Komponentit |