SQLite Liitos: Luonnollinen vasen ulompi, sisempi, ristiin pöytien kanssa

⚡ Älykäs yhteenveto

SQLite JOIN-lausekkeet yhdistävät kahden tai useamman taulukon rivejä käyttämällä INNER JOIN-, JOIN USING-, NATURAL JOIN-, LEFT OUTER JOIN- ja CROSS JOIN -lausekkeita, jolloin voit yhdistää toisiinsa liittyviä tietueita jaettujen sarakkeiden avulla ja lukea tietoja normalisoidusta tietokannasta.

  • 🔗 Liittymislauseke: JOIN-lauseke linkittää kaksi tai useampia taulukoita tai alikyselyitä jaetussa sarakkeessa, joka on määritetty ON- tai USING-ehdolla.
  • 🎯 SISÄLIITTYMÄ: INNER JOIN palauttaa vain ne rivit, joilla liitosehto täsmää molemmissa taulukoissa, ja hylkää täsmäämättömät rivit.
  • 🧩 KÄYTTÖ JA LUONNOLLINEN: JOIN USING nimeää yhden jaetun sarakkeen, kun taas NATURAL JOIN löytää automaattisesti täsmäyksen kaikkiin identtisesti nimettyihin sarakkeisiin.
  • ↩️ VASEN ULKOLIITOS: LEFT OUTER JOIN säilyttää jokaisen vasemman taulukon rivin ja täyttää oikean taulukon sarakkeet, jotka eivät vastaa toisiaan, NULL-arvoilla.
  • ✖️ RISTILIITOS: CROSS JOIN palauttaa karteesisen tulon, joka yhdistää jokaisen vasemman taulukon rivin jokaisen oikean taulukon rivin kanssa.
  • 🤖 AI-apu: Tekoälyn tekstistä SQL:ksi -työkalut ja GitHub Copilot luovat SQLite LIITY kyselyihin selkokielisistä kehotteista.

SQLite Liity

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

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

Avaa sqlite3.exe sqlite-hakemistosta

Vaihe 2) Avaa tietokanta “TutorialsSampleDB.db” seuraavalla komennolla:

Avaa TutorialsSampleDB-tietokanta

Nyt olet valmis suorittamaan minkä tahansa tyyppisiä kyselyjä tietokannassa.

SQLite INNER JOIN

SQLite SISÄLIITOS Venn-diagrammi

INNER JOIN palauttaa vain ne rivit, jotka vastaavat liitosehtoa, ja poistaa kaikki muut rivit, jotka eivät vastaa liitosehtoa.

esimerkki

Seuraavassa esimerkissä yhdistämme kaksi taulukkoa ”Opiskelijat” ja ”Osasto” DepartmentId-arvolla saadaksemme 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 sekä opiskelija- että laitoksen taulukoista tietueet, jotka vastaavat ehtoa ”Students.DepartmentId = Departments.DepartmentId”. Täsmäämättömät rivit ohitetaan eikä niitä sisällytetä tulokseen.

SQLite INNER JOIN -esimerkin tulos

Tästä syystä kyselystä saatiin vain 8 opiskelijaa 10 opiskelijasta, joiden osastot olivat IT, matematiikka ja fysiikka. Opiskelijoita ”Jena” ja ”George” ei kuitenkaan otettu mukaan, koska heidän osastotunnuksensa on tyhjä (null), mikä ei vastaa osastotaulukon osastotunnus-saraketta. Seuraavassa kuvassa:

SQLite INNER JOIN -yhteensopivat rivit

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 JOINin välillä.. KÄYTTÖ:

”JOIN … USING” -komennolla et kirjoita liitosehtoa, vaan kirjoitat vain liitossarakkeen, joka on yhteinen molemmille liitetyille taulukoille. Sen sijaan, että kirjoittaisimme table1:een ”INNER JOIN table2 ON table1.cola = table2.cola”, kirjoitamme sen muodossa ”table1 JOIN table2 USING(cola)”.

esimerkki

Seuraavassa esimerkissä yhdistämme kaksi taulukkoa ”Opiskelijat” ja ”Osasto” DepartmentId-arvolla saadaksemme 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 vain ”USING(DepartmentId)”.
  • 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 KÄYTTÄEN esimerkkitulosta

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 -funktiossa sinun on määritettävä liitosehto, jota sisempi liitos käyttää kahden taulukon liittämiseen. Luonnollisessa liitoksessa et kirjoita liitosehtoa. Kirjoitat vain kahden taulukon nimet ilman ehtoja. Tämän jälkeen luonnollinen liitos tarkistaa automaattisesti, ovatko molempien taulukoiden kaikkien sarakkeiden arvot yhtäpitäviä. Luonnollinen liitos päättelee liitosehdon 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 sarakenimiä sisältävää liitosehtoa (kuten teimme INNER JOIN -funktiossa). Meidän ei edes tarvinnut kirjoittaa sarakenimeä kerran (kuten teimme JOIN USING -funktiossa).
  • Luonnollinen liitos skannaa molemmat sarakkeet kahdesta taulukosta. Se havaitsee, että ehto tulisi koostua vertailemalla osastotunnusta molemmista taulukoista Opiskelijat ja Osastot.

ulostulo

NATURAL JOIN antaa täsmälleen saman tulosteen kuin INNER JOIN- ja JOIN USING -esimerkeistä saamamme tuloste, koska esimerkissämme kaikki kolme kyselyä ovat ekvivalentteja. Joissakin tapauksissa tuloste on kuitenkin erilainen kuin sisäisessä liitoksessa ja luonnollisessa liitoksessa. Esimerkiksi jos on useita samannimisiä taulukoita, luonnollinen liitos vertaa kaikkia sarakkeita toisiinsa. Sisäinen liitos kuitenkin vertaa vain liitosehdon sarakkeita.

SQLite NATURAL JOIN -esimerkkitulos

SQLite LEFT OUTTER JOIN

SQL-standardi määrittelee kolme OUTER JOIN -tyyppiä: LEFT, RIGHT ja FULL, mutta SQLite tukee vain luonnollista LEFT OUTTER JOIN -toimintoa.

LEFT OUTER JOIN -kyselyssä kaikki vasemmasta taulukosta valitsemiesi sarakkeiden arvot sisällytetään kyselyn tulokseen, joten riippumatta siitä, vastaako arvo liitosehtoa vai ei, se sisällytetään tulokseen.

Jos vasemmanpuoleisessa taulukossa on 'n' riviä, kyselyn tuloksissa on 'n' riviä. Oikeanpuoleisen taulukon sarakkeiden arvoissa, jotka eivät kuitenkaan vastaa liitosehtoa, on arvon "null".

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 opiskelijat-taulukon rivit, yhteensä 10 opiskelijaa, ovat mukana. Vaikka neljännellä ja viimeisellä opiskelijalla, Jenalla ja Georgella, olisi osastotunnukset, joita ei ole Osastot-taulukossa, heidätkin otetaan mukaan.

Ja näissä tapauksissa sekä Jenan että Georgen departmentName-arvo on ”null”, koska departments-taulukossa ei ole departmentName-arvoa, joka vastaisi heidän departmentId-arvoaan.

SQLite VASEN ULKOLIITOS esimerkkitulos

Selitetäänpä edellistä vasemman liitoksen käyttöä käyttävää kyselyä tarkemmin Venn-diagrammeja käyttäen:

SQLite VASEN ULKOLIITOS Venn-diagrammi

VASEN LIITOS antaa kaikkien opiskelijoiden nimet opiskelijat-taulukosta, vaikka opiskelijalla olisi osastotunnus, jota ei ole osastot-taulukossa. Joten kysely ei anna vain vastaavia rivejä SISÄISEN LIITOS -kyselynä, vaan antaa sinulle ylimääräisen osan, joka sisältää vasemmanpuoleisen taulukon eli opiskelijat-taulukon vastaavat rivit.

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 OUTER JOIN -operaatioissa, CROSS JOIN -operaatiossa ei tarvitse määrittää liitosehtoa, koska SQLite ei tarvitse sitä CROSS JOIN -toimintoa varten.

SQLite tuottaa loogisen tulosjoukon 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ä ja niiden välissä CROSS JOIN -lauseke.

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.
  • Osastot-taulukon neljälle osastolle neljä arvoa täsmäsi toisen opiskelijan, Johnin, arvoon.
  • Osastot-taulukon neljälle osastolle neljä arvoa täsmäsi kolmannen opiskelijan, Jackin, arvoon… ja niin edelleen.

SQLite CROSS JOIN -esimerkkitulos

UKK

SQLite lisätty RIGHT JOIN- ja FULL OUTER JOIN -tuet versioon 3.39.0, joka julkaistiin vuonna 2022. Vanhemmissa versioissa RIGHT JOIN -käskyä emuloidaan swapilla.ping taulukot VASEN LIITOKSESSA ja TÄYDELLÄ ULKOLIITOKSELLA yhdistämällä kaksi VASEN LIITOKSESSA UNION-operaattorilla.

Itseliitos liittää taulukon itseensä taulukon aliaksien avulla, jolloin yksi kopio toimii vasempana taulukkona ja toinen oikeana. Se on hyödyllinen saman taulukon rivien vertailuun, kuten työntekijöiden ja heidän esimiestensä yhdistämiseen.

Kyllä. Yhteen SELECT-käskyyn ketjutat useita JOIN-lausekkeita, joilla kullakin on oma ON- tai USING-ehtonsa, esimerkiksi FROM A JOIN B ON … JOIN C ON …. SQLite yhdistää vasemmalta oikealle olevat taulukot yhdeksi yhdistetyksi tulosjoukoksi.

Pelkän JOIN-käskyn kirjoittaminen on sama kuin INNER JOIN-käskyn kirjoittaminen SQLiteMolemmat säilyttävät vain rivit, jotka täyttävät ON- tai USING-ehdon, joten täsmäämättömät rivit jätetään pois. INNER-avainsana on valinnainen, joten JOIN ja INNER JOIN ovat keskenään vaihdettavissa.

Indeksin luominen liitosehdossa käytetyille sarakkeille mahdollistaa SQLite rivien täsmäytystä ilman koko taulukoiden skannaamista, mikä nopeuttaa suurten tietojoukkojen liitoksia. Viiteavaimen sarakkeiden indeksointi ja ANALYZE-komennon suorittaminen tilastojen päivittämiseksi parantavat liitoskyselyiden suorituskykyä entisestään.

INNER JOIN palauttaa vain rivit, jotka vastaavat molemmissa taulukoissa. LEFT OUTER JOIN palauttaa jokaisen rivin vasemmasta taulukosta sekä vastaavat oikean taulukon rivit, täyttäen vastaamattomat oikean taulukon rivit NULL-arvolla. Joten LEFT JOIN ei koskaan poista vasemman taulukon rivejä.

Kyllä. Tekoälyn tekstistä SQL:ksi -avustajat muuttavat selkokieliset pyynnöt SQLite INNER-, LEFT-, NATURAL- ja CROSS JOIN -lausekkeet. Taulukoiden ja sarakenimien sekä suhteiden antaminen parantaa tarkkuutta, ja jokainen luotu liitos tulisi tarkistaa ja testata ennen sen suorittamista oikeilla tiedoilla.

GitHub Copilot ehdottaa SQLite JOIN-kyselyt suoraan editoreissa, kuten VS Code, täydentämällä INNER JOIN-, LEFT JOIN- ja ON- tai USING-lausekkeita. Se lukee lähellä olevia skeemoja ja kommentteja, joten sen ehdotukset käyttävät uudelleen todellisia taulukko- ja sarakenimiäsi.

Tiivistä tämä viesti seuraavasti: