SQLite-liitäntätaulukot: Sisempi, Luonnollinen, Vasen ulompi, Risti (esimerkkejä)

Sisällysluettelo:

Anonim

SQLite tukee erityyppisiä SQL-liittymiä, kuten INNER JOIN, LEFT OUTER JOIN ja CROSS JOIN. Kutakin JOIN-tyyppiä käytetään eri tilanteisiin, kuten näemme tässä opetusohjelmassa.

Tässä opetusohjelmassa opit-

  • Johdanto SQLite JOIN -lausekkeeseen
  • SISÄINEN LIITTYMINEN
  • LIITY ... KÄYTTÖ
  • LUONNOLLINEN LIITTYMINEN
  • VASEN ULKOINEN LIITTYMINEN
  • RISTIN LIITTYMINEN

Johdanto SQLite JOIN -lausekkeeseen

Kun työskentelet tietokannan kanssa, jossa on useita taulukoita, sinun on usein hankittava tietoja näistä useista taulukoista.

JOIN-lausekkeen avulla voit linkittää vähintään kaksi taulukkoa tai alakyselyä liittämällä ne. Voit myös määrittää, millä sarakkeella taulukot on linkitettävä ja millä ehdoilla.

Kaikilla JOIN-lauseilla on oltava seuraava syntakse:

Jokainen liittymislauseke sisältää:

  • Taulukko tai alakysely, joka on vasen taulukko; taulukko tai alakysely ennen liittymislauseketta (vasemmalla puolella).
  • JOIN-operaattori - määritä liitostyyppi (joko INNER JOIN, LEFT OUTER JOIN tai CROSS JOIN).
  • JOIN-rajoitus - kun olet määrittänyt taulukot tai alikyselyt liittymistä varten, sinun on määritettävä liittymisrajoitus, joka on ehto, jossa kyseistä ehtoa vastaavat rivit valitaan liitostyypistä riippuen.

Huomaa, että kaikissa seuraavissa esimerkeissä sinun on suoritettava sqlite3.exe ja avattava yhteys näytetietokantaan virtaavana:

Vaihe 1) Tässä vaiheessa

  1. Avaa Oma tietokone ja siirry seuraavaan hakemistoon " C: \ sqlite " ja
  2. Avaa sitten " sqlite3.exe ":

Vaihe 2) Avaa tietokanta " TutorialsSampleDB.db " seuraavalla komennolla:

Nyt olet valmis suorittamaan minkä tahansa tyyppisen kyselyn tietokannassa.

SQLite SISÄINEN LIITTYMINEN

INNER JOIN palauttaa vain rivit, jotka vastaavat liittymisehtoa ja eliminoivat kaikki muut rivit, jotka eivät vastaa liittymisehtoa.

Esimerkki

Seuraavassa esimerkissä yhdistämme kaksi taulukkoa " Opiskelijat " ja " Osastot " DepartmentId: n kanssa saadaksemme osaston nimen jokaiselle opiskelijalle seuraavasti:

VALITSEOpiskelijat.Opiskelijan nimi,Osastot. Osaston nimiOpiskelijoiltaINNER JOIN Osastot PÄÄLLÄ Students.DepartmentId = Departments.DepartmentId;

Koodin selitys:

INNER JOIN toimii seuraavasti:

  • Valitse lausekkeessa voit valita haluamasi sarakkeet kahdesta viitatusta taulukosta.
  • INNER JOIN -lauseke kirjoitetaan ensimmäisen taulukon, johon viitataan "From" -lausekkeella, jälkeen.
  • Sitten liittymisehto määritetään ON-painikkeella.
  • Viitetaulukoille voidaan määrittää aliakset.
  • INNER-sana on valinnainen, voit kirjoittaa JOIN.

Tuotos:

  • INNER JOIN tuottaa tietueet molemmilta - opiskelijoiden ja laitoksen taulukoilta, jotka vastaavat ehtoa, joka on " S tudents.DepartmentId = Departments.DepartmentId ". Vastaamattomat rivit jätetään huomiotta eikä niitä sisällytetä tulokseen.
  • Siksi vain 8 opiskelijaa 10 opiskelijasta palasi tähän kyselyyn tietotekniikan, matematiikan ja fysiikan osastojen kanssa. Oppilaita "Jena" ja "George" ei kuitenkaan otettu mukaan, koska heillä on tyhjä osastotunnus, joka ei vastaa osastotaulukon saraketta DepartmentId. Seuraavasti:

SQLite LIITY ... KÄYTTÖ

INNER JOIN voidaan kirjoittaa käyttämällä "USING" -lauseketta irtisanomisen välttämiseksi, joten sen sijaan, että kirjoittaisit "ON Students.DepartmentId = Departments.DepartmentId", voit kirjoittaa vain "USING (DepartmentID)".

Voit käyttää "LIITY… KÄYTTÄMINEN" aina, kun sarakkeet, joita vertailet liittymisehdossa, ovat samannimisiä. Tällaisissa tapauksissa niitä ei tarvitse toistaa käyttämällä on-ehtoa ja vain sanoa sarakkeiden nimet, ja SQLite havaitsee sen.

INNER JOINin ja JOINin ero ... KÄYTTÖ:

Valitse "JOIN

… KÄYTTÄESSÄ "et kirjoita liittymisehtoa, kirjoitat vain liittymissarakkeen, joka on yhteinen kahden liitetyn taulukon välillä, sen sijaan, että kirjoittaisit taulukon1" SISÄISEN LIITTYMINEN taulukko2 PÄÄLLÄ taulukko1.cola = taulukko2.kola "kirjoitamme sen kuten" taulukko1 LIITY taulukko2 KÄYTTÖ (cola) ".

Esimerkki

Seuraavassa esimerkissä yhdistämme kaksi taulukkoa " Opiskelijat " ja " Osastot " DepartmentId: n kanssa saadaksemme osaston nimen jokaiselle opiskelijalle seuraavasti:

VALITSEOpiskelijat.Opiskelijan nimi,Osastot. Osaston nimiOpiskelijoiltaINNER JOIN Osastot KÄYTETTÄVÄT (DepartmentId);

Selitys

  • Toisin kuin edellisessä esimerkissä, emme kirjoittaneet " ON Students.DepartmentId = Departments.DepartmentId ". Kirjoitimme juuri " KÄYTTÄMINEN (DepartmentId) ".
  • SQLite päättää liittymisehdon automaattisesti ja vertaa DepartmentId: tä molemmista taulukoista - Opiskelijat ja Osastot.
  • Voit käyttää tätä syntaksia aina, kun vertaamasi sarakkeet ovat samalla nimellä.

Tuotos

  • Tämä antaa sinulle saman tarkan tuloksen kuin edellisessä esimerkissä:

SQLite NATURAL LIITTYMINEN

LUONNOLLINEN JOIN on samanlainen kuin JOIN… KÄYTTÖ, ero on siinä, että se testaa automaattisesti molemmissa taulukoissa olevien sarakkeiden arvojen välisen tasa-arvon.

Sisäisen ja luonnollisen liitoksen ero:

  • I INNER JOIN, sinun on määritettävä liittämisehto, jota sisempi liitos käyttää kahden taulukon liittämiseen. Luonnollisessa liitoksessa et kirjoita liittymisehtoa. Kirjoitat vain kahden taulukon nimet ilman ehtoja. Sitten luonnollinen liitos testaa automaattisesti, että molemmissa taulukoissa on jokaisen sarakkeen arvojen välinen tasa-arvo. Luonnollinen liitos päättää liitoksen ehdon automaattisesti.
  • NATURAL JOIN -ohjelmassa molempien samannimisten taulukoiden sarakkeet sovitetaan toisiinsa. Esimerkiksi, jos meillä on kaksi taulukkoa, joilla on kaksi yhteistä sarakkeiden nimeä (molemmat sarakkeet ovat samannimisiä kahdessa taulukossa), luonnollinen liitos yhdistää nämä taulukot vertaamalla molempien sarakkeiden arvoja eikä vain yhdestä sarake.

Esimerkki

VALITSEOpiskelijat.Opiskelijan nimi,Osastot. Osaston nimiOpiskelijoiltaLuonnolliset JOIN-osastot;

Selitys

  • Meidän ei tarvitse kirjoittaa liittymisehtoa sarakkeiden nimillä (kuten teimme INNER JOIN). Meidän ei tarvinnut edes kirjoittaa sarakkeen nimeä kerran (kuten teimme JOIN USING).
  • Luonnollinen liitos skannaa molemmat sarakkeet kahdesta taulukosta. Se havaitsee, että ehdon tulisi koostua vertaamalla molempien taulukoiden Opiskelijat ja Osastot osastoa DepartmentId.

Tuotos

  • Luonnollinen JOIN antaa sinulle saman tarkan tuotoksen kuin INNER JOIN- ja JOIN USING -esimerkkeistä. Koska esimerkissämme kaikki kolme kyselyä vastaavat. Mutta joissakin tapauksissa tuotos eroaa sisäisestä liitoksesta sitten luonnollisessa liitoksessa. Esimerkiksi, jos samankaltaisia ​​taulukoita on enemmän, luonnollinen liitos sovittaa kaikki sarakkeet toisiaan vastaan. Sisäinen liitos vastaa kuitenkin vain liittymisehdon sarakkeita (lisätietoja seuraavasta osasta; sisemmän liitoksen ja luonnollisen liitoksen ero).

SQLite VASEN ULKOINEN LIITTYMINEN

SQL-standardi määrittelee kolme OUTER JOIN -tyyppiä: VASEN, OIKEA ja TÄYSI, mutta SQLite tukee vain VASEN OUTER JOIN.

LEFT OUTER JOIN -kohdassa kaikki vasemmasta taulukosta valitsemiesi sarakkeiden arvot sisällytetään kyselyn tulokseen, joten riippumatta siitä, mikä arvo vastaa liittymisehtoa vai ei, se sisällytetään tulokseen.

Joten jos vasemmassa taulukossa on n-riviä, kyselyn tuloksissa on n-riviä. Oikeasta taulukosta tulevien sarakkeiden arvojen osalta kuitenkin jos arvo, joka ei vastaa liittymisehtoa, sisältää "null" -arvon.

Joten saat useita rivejä, jotka vastaavat vasemman liitoksen rivien lukumäärää. Joten saat molemmista taulukoista vastaavat rivit (kuten INNER JOIN -tulokset), plus vasemman taulukon vastaamattomat rivit.

Esimerkki

Seuraavassa esimerkissä yritämme "VASEN LIITY" liittyä kahteen taulukkoon "Opiskelijat" ja "Osastot":

VALITSEOpiskelijat.Opiskelijan nimi,Osastot. Osaston nimiOpiskelijoilta - tämä on vasen taulukkoLEFT JOIN Osastot ON Students.DepartmentId = Departments.DepartmentId;

Selitys

  • LEFT JOIN -syntaksi on sama kuin INNER JOIN; kirjoitat LEFT JOIN kahden taulukon väliin, ja sitten liittymisehto tulee ON-lausekkeen jälkeen.
  • Ensimmäinen taulukko from-lauseen jälkeen on vasen taulukko. Vasemman liitoksen jälkeen määritelty toinen taulukko on oikea taulukko.
  • OUTER-lauseke on valinnainen; LEFT OUTER JOIN on sama kuin LEFT JOIN.

Tuotos

  • Kuten näette, kaikki opiskelijataulukon rivit ovat mukana, mikä on yhteensä 10 opiskelijaa. Vaikka neljäs ja viimeinen opiskelija, Jena ja George departmentIds ei ole osastot-taulukossa, myös ne sisältyvät.
  • Ja näissä tapauksissa DepartmentName-arvo sekä Jenalle että Georgeelle on "nolla", koska osastotaulukossa ei ole DepartmentName-arvoa, joka vastaa niiden departmentId-arvoa.

Annetaan edelliselle kyselylle vasemman liittymän avulla syvempi selitys Van-kaavioiden avulla:

VASEN JOIN antaa kaikille opiskelijoille nimet opiskelijataulukosta, vaikka opiskelijalla olisi osastotunnus, jota ei ole osastotaulukossa. Joten kysely ei anna sinulle vain vastaavia rivejä INNER JOIN, vaan antaa sinulle ylimääräisen osan, jossa on vastaamattomat rivit vasemmassa taulukossa, joka on opiskelijoiden taulukko.

Huomaa, että kaikilla opiskelijoiden nimillä, joilla ei ole vastaavaa osastoa, on osaston nimelle nolla-arvo, koska sille ei ole vastaavaa arvoa, ja nämä arvot ovat vastaamattomien rivien arvoja.

SQLite RISTYY

CROSS JOIN antaa suorakulmion tuloksen kahden liitetyn taulukon valituille sarakkeille sovittamalla kaikki ensimmäisen taulukon arvot toisen taulukon kaikkien arvojen kanssa.

Joten jokaisen ensimmäisen taulukon arvon kohdalla saat n-ottelut toisesta taulukosta, jossa n on toisen taulukon rivien määrä.

Toisin kuin INNER JOIN ja LEFT OUTER JOIN, CROSS JOIN -toiminnon kanssa sinun ei tarvitse määrittää liittymisehtoa, koska SQLite ei tarvitse sitä CROSS JOIN -palveluun.

SQLite johtaa loogisiin tuloksiin yhdistämällä kaikki ensimmäisen taulukon arvot kaikkien toisen taulukon arvojen kanssa.

Esimerkiksi, jos valitsit sarakkeen ensimmäisestä taulukosta (colA) ja toisen sarakkeen toisesta taulukosta (colB). ColA sisältää kaksi arvoa (1,2) ja colB sisältää myös kaksi arvoa (3,4).

Sitten CROSS JOIN -tulokseksi tulee neljä riviä:

  • Kaksi riviä yhdistämällä ensimmäinen colA: n arvo, joka on 1, ja colB: n (3,4) kaksi arvoa, jotka ovat (1,3), (1,4).
  • Samoin kaksi riviä yhdistämällä colA: n toinen arvo, joka on 2, colB: n (3,4) kahteen arvoon, jotka ovat (2,3), (2,4).

Esimerkki

Seuraavassa kyselyssä yritämme CROSS JOIN -asetusta opiskelijoiden ja osastojen taulukoiden välillä:

VALITSEOpiskelijat.Opiskelijan nimi,Osastot. Osaston nimiOpiskelijoiltaCROSS JOIN -osastot;

Selitys

  • Valintalausekkeessa valitsimme vain kaksi saraketta "opiskelijanimi" opiskelijataulukosta ja "osaston nimi" osastotaulukosta.
  • Ristiliitosta varten emme määritelleet mitään liittymisehtoa, vaan vain kaksi taulukkoa yhdistettynä CROSS JOINin kanssa niiden keskellä.

Tuotos:

Kuten näette, tulos on 40 riviä; 10 opiskelijataulukon arvoa vastasi osastotaulukon 4 osastoa. Seuraavasti:

  • Osastotaulukon neljä arvoa neljälle osastolle sopivat ensimmäisen opiskelijan Michelin kanssa.
  • Osastotaulukon neljä arvoa neljälle osastolle sopivat toisen opiskelijan Johnin kanssa.
  • Osastotaulukon neljä arvoa neljälle osastolle sopivat yhteen kolmannen opiskelijan Jackin kanssa.

    … ja niin edelleen.

Yhteenveto

SQLite JOIN -sovellusten avulla voit linkittää yhden tai useamman taulukon tai alakyselyn yhteen valitaksesi sarakkeet molemmista taulukoista tai alakyselyistä.