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:

SQLite JOIN-lauseen syntaksi
SQLite JOIN-lauseen 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

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

SQLite JOIN-lauseke

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

SQLite JOIN-lauseke

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.

SQLite INNER JOIN
SQLite INNER JOIN

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

SQLite SISÄLIITOS Esimerkki

  • 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 SISÄLIITOS Esimerkki

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 LIITY 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

SQLite NATURAL JOIN Esimerkki

  • 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

SQLite LEFT OUTTER JOIN Esimerkki

  • 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:

SQLite LEFT OUTTER JOIN

SQLite LEFT OUTTER JOIN

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

SQLite CROSS JOIN Esimerkki

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ä.

Tiivistä tämä viesti seuraavasti: