SQLite Liity: Luonnollinen vasen ulko-, sisä-, risti taulukoilla Esimerkki
SQLite tukee erilaisia SQL Liittyy, kuten SISÄLIITTYMINEN, LEFT OUTTER JOIN ja CROSS JOIN. Jokaista JOIN-tyyppiä käytetään eri tilanteissa, kuten tässä opetusohjelmassa nähdään.
Johdatus SQLite JOIN-lauseke
Kun työskentelet tietokannassa, jossa on useita taulukoita, sinun on usein hankittava tietoja näistä useista taulukoista.
JOIN-lausekkeen avulla voit linkittää kaksi tai useampia taulukkoja tai alikyselyjä yhdistämällä ne. Voit myös määrittää, minkä sarakkeen mukaan taulukot on linkitettävä ja millä ehdoilla.
Jokaisella JOIN-lauseella on oltava seuraava syntaksi:

Jokainen liittymislauseke sisältää:
- Taulukko tai alikysely, joka on vasen taulukko; taulukko tai alikysely ennen join-lausetta (sen vasemmalla puolella).
- JOIN-operaattori – määritä liitostyyppi (joko INNER JOIN, LEFT OUTTER JOIN tai CROSS JOIN).
- JOIN-rajoitus – kun olet määrittänyt yhdistettävät taulukot tai alikyselyt, sinun on määritettävä liitosrajoitus, joka on ehto, jossa tätä ehtoa vastaavat vastaavat rivit valitaan liitostyypin mukaan.
Huomaa, että kaikki seuraavat SQLite JOIN-taulukoiden esimerkkejä, sinun on suoritettava sqlite3.exe ja avattava yhteys mallitietokantaan virtaavana:
Vaihe 1) Tässä vaiheessa
- Avaa Oma tietokone ja siirry seuraavaan hakemistoon "C:\sqlite"Ja
- Avaa sitten "sqlite3.exe"
Vaihe 2) Avaa tietokanta "TutorialsSampleDB.db" seuraavalla komennolla:
Nyt olet valmis suorittamaan minkä tahansa tyyppisiä kyselyjä tietokannassa.
SQLite INNER JOIN
INNER JOIN palauttaa vain rivit, jotka vastaavat liitosehtoa, ja eliminoi kaikki muut rivit, jotka eivät vastaa liitosehtoa.

esimerkki
Seuraavassa esimerkissä yhdistämme kaksi taulukkoa "Opiskelijat"Ja"Osastot” ja DepartmentId saadaksesi kunkin opiskelijan osaston nimen seuraavasti:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Koodin selitys
INNER JOIN toimii seuraavasti:
- Valitse-lauseessa voit valita mitkä tahansa sarakkeet, jotka haluat valita kahdesta viitatusta taulukosta.
- INNER JOIN -lause kirjoitetaan ensimmäisen taulukon jälkeen, johon viitataan "From"-lauseella.
- Sitten liitosehto määritetään PÄÄLLÄ.
- Viitetyille taulukoille voidaan määrittää aliakset.
- SISÄINEN sana on valinnainen, voit kirjoittaa JOIN.
ulostulo
- INNER JOIN tuottaa molemmista tietueet – opiskelijoiden ja laitoksen taulukot, jotka vastaavat ehtoa, joka on "Students.DepartmentId = Departments.DepartmentId ". Vastaamattomat rivit ohitetaan, eikä niitä sisällytetä tulokseen.
- Tästä syystä vain 8 opiskelijaa 10 opiskelijasta palautettiin tästä kyselystä tietotekniikan, matematiikan ja fysiikan osastoilla. Opiskelijoita "Jena" ja "George" ei otettu mukaan, koska heillä on tyhjä osastotunnus, joka ei vastaa osastotaulukon osastoId-saraketta. seuraavasti:
SQLite LIITY… KÄYTTÖ
INNER JOIN voidaan kirjoittaa käyttämällä "KÄYTTÖ"-lausetta redundanssin välttämiseksi, joten sen sijaan, että kirjoitat "ON Students.DepartmentId = Departments.DepartmentId", voit kirjoittaa vain "USING(Osastotunnus)".
Voit käyttää "JOIN .. KÄYTTÖ" aina, kun liitosehdon sarakkeet, joita vertaat, ovat samannimiä. Tällaisissa tapauksissa niitä ei tarvitse toistaa käyttämällä on-ehtoa, vaan ilmoita vain sarakkeiden nimet ja SQLite huomaa sen.
Ero INNER JOINin ja JOIN:in välillä .. KÄYTTÖ:
"JOIN … KÄYTTÖ" -toiminnolla et kirjoita liitosehtoa, kirjoitat vain liitossarakkeen, joka on yhteinen kahden liitetyn taulukon välillä, sen sijaan, että kirjoittaisit table1 "INNER JOIN table2 ON table1.cola = table2.cola" se on kuin "taulukko1 LIITTY taulukko2 KÄYTTÖÖN (cola)".
esimerkki
Seuraavassa esimerkissä yhdistämme kaksi taulukkoa "Opiskelijat"Ja"Osastot” ja DepartmentId saadaksesi kunkin opiskelijan osaston nimen seuraavasti:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
Selitys
- Toisin kuin edellisessä esimerkissä, emme kirjoittaneet "ON Students.DepartmentId = Departments.DepartmentId". kirjoitimme juuri "KÄYTTÖ(osastotunnus)".
- SQLite päättelee liitosehdon automaattisesti ja vertaa osastotunnusta molemmista taulukoista – opiskelijat ja laitokset.
- Voit käyttää tätä syntaksia aina, kun kahdella vertaamallasi sarakkeella on sama nimi.
ulostulo
- Tämä antaa sinulle täsmälleen saman tuloksen kuin edellinen esimerkki:
SQLite LUONNOLLINEN LIITTYMINEN
NATURAL JOIN on samanlainen kuin JOIN…USING, ero on siinä, että se testaa automaattisesti molemmissa taulukoissa olevien sarakkeiden arvojen tasa-arvon.
Ero SISÄLIITTYMISEN ja LUONNON LIITTYMISEN välillä:
- INNER JOIN -kohdassa sinun on määritettävä liitosehto, jota sisäinen liitos käyttää kahden taulukon yhdistämiseen. Luonnollisessa liitoksessa et kirjoita liitosehtoa. Kirjoitat vain kahden taulukon nimet ilman ehtoja. Sitten luonnollinen liitos testaa automaattisesti, onko molemmissa taulukoissa jokaisen sarakkeen arvojen välinen tasa-arvo. Luonnollinen liitos päättelee liitoksen ehdon automaattisesti.
- NATURAL JOIN -kohdassa kaikki sarakkeet molemmista samannimisistä taulukoista yhdistetään toisiinsa. Jos meillä on esimerkiksi kaksi taulukkoa, joissa on kaksi yhteistä sarakkeen nimeä (kaksi saraketta on olemassa kahdessa taulukossa samalla nimellä), luonnollinen liitos yhdistää kaksi taulukkoa vertaamalla molempien sarakkeiden arvoja eikä vain yhden sarakkeen arvoja. sarakkeessa.
esimerkki
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
Selitys
- Meidän ei tarvitse kirjoittaa liitosehtoa sarakkeiden nimillä (kuten teimme INNER JOINissa). Meidän ei tarvinnut edes kirjoittaa sarakkeen nimeä kerran (kuten teimme LIITTYMISESSÄ).
- Luonnollinen liitos skannaa molemmat sarakkeet kahdesta taulukosta. Se havaitsee, että ehto tulisi koostua vertailemalla osastotunnusta molemmista taulukoista Opiskelijat ja Osastot.
ulostulo
- Natural JOIN antaa sinulle saman tarkan tulosteen kuin tulos, jonka saimme INNER JOIN- ja JOIN USING -esimerkeistä. Koska esimerkissämme kaikki kolme kyselyä ovat samanarvoisia. Mutta joissakin tapauksissa tulos on erilainen kuin sisäliitos kuin luonnollisessa liitoksessa. Jos esimerkiksi on useampi samanniminen taulukko, luonnollinen liitos vastaa kaikki sarakkeet toisiinsa. Sisäliitos vastaa kuitenkin vain liitosehdon sarakkeita (lisätietoja seuraavassa osiossa; ero sisemmän liitoksen ja luonnollisen liitoksen välillä).
SQLite LEFT OUTTER JOIN
SQL-standardi määrittelee kolme tyyppistä ULKOAJOIN:ia: LEFT, RIGHT ja FULL, mutta SQLite tukee vain luonnollista LEFT OUTTER JOIN -toimintoa.
LEFT OUTER JOIN -kohdassa kaikki vasemmasta taulukosta valitsemiesi sarakkeiden arvot sisällytetään kysymys, joten riippumatta siitä, onko arvo vastaa liitosehtoa vai ei, se sisällytetään tulokseen.
Joten jos vasemmassa taulukossa on "n" riviä, kyselyn tuloksissa on "n" riviä. Oikeasta taulukosta tulevien sarakkeiden arvot sisältävät kuitenkin "nolla"-arvon, jos jokin arvo ei vastaa liitosehtoa.
Joten saat rivien määrän, joka vastaa vasemman liitoksen rivien määrää. Jotta saat vastaavat rivit molemmista taulukoista (kuten INNER JOIN -tulokset) sekä ristiriitaiset rivit vasemmasta taulukosta.
esimerkki
Seuraavassa esimerkissä yritämme "LEFT JOIN" yhdistää kaksi taulukkoa "Opiskelijat" ja "Osastot":
SELECT Students.StudentName, Departments.DepartmentName FROM Students -- this is the left table LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Selitys
- SQLite LEFT JOIN -syntaksi on sama kuin INNER JOIN; kirjoitat LEFT JOIN kahden taulukon väliin, ja sitten liitosehto tulee ON-lauseen jälkeen.
- Ensimmäinen taulukko from-lauseen jälkeen on vasen taulukko. Toinen luonnollisen LEFT JOINin jälkeen määritetty taulukko on oikea taulukko.
- OUTER-lause on valinnainen; LEFT natural OUTER JOIN on sama kuin LEFT JOIN.
ulostulo
- Kuten näet, kaikki opiskelijataulukon rivit ovat mukana, jotka ovat yhteensä 10 opiskelijaa. Vaikka neljättä ja viimeistä opiskelijaa Jenan ja Georgen osastotunnuksia ei olisi Osastot-taulukossa, myös ne ovat mukana.
- Ja näissä tapauksissa sekä Jenan että Georgen DepartmentName-arvo on "nolla", koska osastojen taulukossa ei ole DepartmentName-arvoa, joka vastaa niiden DepartmentId-arvoa.
Tehdään edellinen kysely käyttämällä vasenta liitosta syvempää selitystä Van-kaavioiden avulla:
LEFT JOIN antaa kaikille opiskelijoille nimet opiskelijataulukosta, vaikka opiskelijalla olisi osastotunnus, jota ei ole osastotaulukossa. Kysely ei siis anna sinulle vain vastaavia rivejä INNER JOIN -liitoksena, vaan se antaa sinulle ylimääräisen osan, jossa on ristiriitaiset rivit vasemmasta taulukosta, joka on oppilaiden taulukko.
Huomaa, että jokaisella opiskelijan nimellä, jolla ei ole vastaavaa osastoa, osaston nimelle on "null"-arvo, koska sille ei ole vastaavaa arvoa, ja nämä arvot ovat arvoja vastaamattomilla riveillä.
SQLite Ristiliittymä
CROSS JOIN antaa karteesisen tuotteen valituille sarakkeille kahdesta yhdistetystä taulukosta sovittamalla kaikki ensimmäisen taulukon arvot kaikkiin toisen taulukon arvoihin.
Joten jokaiselle ensimmäisen taulukon arvolle saat 'n' vastaavuuksia toisesta taulukosta, jossa n on taulukon toisten rivien lukumäärä.
Toisin kuin INNER JOIN ja LEFT OUTTER JOIN, sinun ei tarvitse määrittää liitosehtoa CROSS JOINin kanssa, koska SQLite ei tarvitse sitä CROSS JOIN.
SQLite johtaa loogisiin tuloksiin, jotka on asetettu yhdistämällä kaikki ensimmäisen taulukon arvot kaikkiin toisen taulukon arvoihin.
Jos esimerkiksi 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 JOINin tulos on neljä riviä:
- Kaksi riviä yhdistämällä sarakkeen A ensimmäinen arvo, joka on 1, sarakkeen B (3,4) kahteen arvoon, jotka ovat (1,3), (1,4).
- Samoin kaksi riviä yhdistämällä colA:n toinen arvo, joka on 2, sarakkeen B (3,4) kahteen arvoon, jotka ovat (2,3), (2,4).
esimerkki
Seuraavassa kyselyssä kokeilemme CROSS JOIN -toimintoa Opiskelijat- ja Osastot-taulukoiden välillä:
SELECT Students.StudentName, Departments.DepartmentName FROM Students CROSS JOIN Departments;
Selitys
- In SQLite Valitse useista taulukoista, valitsimme vain kaksi saraketta "studentsname" opiskelijataulukosta ja "departmentName" osastotaulukosta.
- Ristiliitokselle emme määrittäneet mitään liitosehtoa vain kaksi taulukkoa yhdistettynä CROSS JOINiin niiden keskellä.
ulostulo
Kuten näet, tulos on 40 riviä; Opiskelijoiden taulukon 10 arvoa vastaavat osastotaulukon 4 osastoa. seuraavasti:
- Neljä arvoa neljälle osastolle osastotaulukosta täsmäsi ensimmäisen opiskelijan Michelin kanssa.
- Neljä arvoa neljälle osastolle osastotaulukosta täsmäsi toisen opiskelijan Johnin kanssa.
- Neljä arvoa neljälle osastolle osastotaulukosta täsmäsi kolmannen opiskelijan Jackin kanssa… ja niin edelleen.
Yhteenveto
Käyttäminen SQLite JOIN-kyselyn avulla voit linkittää yhden tai useamman taulukon tai alikyselyn yhteen valitaksesi sarakkeet molemmista taulukoista tai alikyselyistä.








