SQLite Ühendus: Vasakpoolne naturaalne välimine, sisemine, rist laudadega

⚡ Nutikas kokkuvõte

SQLite JOIN-klauslid ühendavad kahe või enama tabeli ridu, kasutades INNER JOIN-i, JOIN USING-i, NATURAL JOIN-i, LEFT OUTER JOIN-i ja CROSS JOIN-i, võimaldades teil seotud kirjeid ühiskasutuses veergude abil sobitada ja andmeid normaliseeritud andmebaasist lugeda.

  • 🔗 Liitumisklausel: JOIN-klausel lingib kaks või enam tabelit või alampäringut jagatud veerus, mis on määratletud tingimusega ON või USING.
  • 🎯 SISEMINE LIITUMINE: Funktsioon INNER JOIN tagastab ainult need read, mille liitmistingimus mõlemas tabelis sobib, jättes kõrvale sobimatud read.
  • 🧩 KASUTAMINE ja LOODUSLIK: JOIN USING nimetab ühe jagatud veeru, samas kui NATURAL JOIN leiab automaatselt vaste igale identselt nimetatud veerule.
  • ↩️ VASAK VÄLIMINE ÜHENDUS: LEFT OUTER JOIN säilitab kõik vasakpoolse tabeli read ja täidab vasteta parempoolse tabeli veerud NULL-väärtustega.
  • ✖️ RISTLIITUMISED: CROSS JOIN tagastab Cartesiuse korrutise, sidudes iga vasakpoolse tabeli rea iga parempoolse tabeli reaga.
  • 🤖 AI abi: Tehisintellekti teksti SQL-iks teisendamise tööriistad ja GitHub Copilot genereerivad SQLite LIITU päringutega lihtsates inglise keele küsimustes.

SQLite Liitu

SQLite toetab erinevat tüüpi SQL Liitumised, nagu SISEMINE, VASAKULE VÄLISÜHENDAMINE ja RISTÜHENDAMINE. Igat tüüpi JOIN kasutatakse erineva olukorra jaoks, nagu näeme selles õpetuses.

Sissejuhatus SQLite JOIN klausel

Kui töötate mitme tabeliga andmebaasiga, peate sageli saama andmeid nendest mitmest tabelist.

JOIN-klausli abil saate linkida kaks või enam tabelit või alampäringut, ühendades need. Samuti saate määrata, millise veeru järgi peate tabelid siduma ja millistel tingimustel.

Igal JOIN-klauslil peab olema järgmine süntaks:

SQLite JOIN-klausli süntaks

Iga liitumisklausel sisaldab:

  • tabel või alampäring, mis on vasakpoolne tabel; tabel või alampäring enne liitumisklauslit (sellest vasakul).
  • Operaator JOIN – määrake liitumise tüüp (kas INNER JOIN, LEFT OUTTER JOIN või CROSS JOIN).
  • JOIN-piirang – pärast ühendatavate tabelite või alampäringute määramist peate määrama liitumispiirangu, mis on tingimus, mille korral valitakse sellele tingimusele vastavad sobivad read olenevalt liitumise tüübist.

Pange tähele, et kõige järgmise puhul SQLite JOIN tabelite näidete puhul peate käivitama faili sqlite3.exe ja avama ühenduse näidisandmebaasiga vooga:

Step 1) Selles etapis avage Minu arvuti ja navigeerige järgmisse kataloogi „C:\sqlite” ning seejärel avage „sqlite3.exe”:

Ava sqlite3.exe fail sqlite kataloogist

Step 2) Ava andmebaas „TutorialsSampleDB.db” järgmise käsuga:

Avage TutorialsSampleDB andmebaas

Nüüd olete valmis käivitama andmebaasis mis tahes tüüpi päringuid.

SQLite INNER JOIN

SQLite SISEMINE ÜHINEMINE Venni diagramm

Funktsioon INNER JOIN tagastab ainult read, mis vastavad liitmistingimusele, ja eemaldab kõik teised read, mis ei vasta liitmistingimusele.

Näide

Järgmises näites ühendame kaks tabelit „Õpilased“ ja „Osakonnad“ osakonnaId-ga, et saada iga õpilase osakonna nimi järgmiselt:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Koodi selgitus

INNER JOIN toimib järgmiselt:

  • Valimisklauslis saate valida kahest viidatud tabelist kõik veerud, mida soovite valida.
  • Klausel INNER JOIN kirjutatakse pärast esimest tabelit, millele viidatakse klausliga "From".
  • Seejärel määratakse liitumise tingimus olekuga ON.
  • Viidatud tabelitele saab määrata varjunimed.
  • SISEsõna on valikuline, võite lihtsalt kirjutada LIITUMINE.

Väljund

SISEMINE LIITMINE loob nii üliõpilaste kui ka osakonna tabelitest kirjed, mis vastavad tingimusele „Üliõpilased.OsakonnaId = Osakonnad.OsakonnaId“. Sobimatuid ridu ignoreeritakse ja tulemusse ei kaasata.

SQLite INNER JOIN näite tulemus

Seepärast tagastati sellest päringust ainult 8 õpilast 10 õpilase seast, kelle osakonnad olid IT, matemaatika ja füüsika. Õpilasi „Jena“ ja „George“ aga ei kaasatud, kuna neil on tühi osakonna ID, mis ei vasta osakondade tabeli osakonnaId veerule. Järgnevalt:

SQLite INNER JOIN sobitatud read

SQLite LIITU … KASUTAMINE

SISE LIITUMISE saab kirjutada lause "KASUTAMINE" abil, et vältida üleliigsust, nii et selle asemel, et kirjutada "ON Students.DepartmentId = Departments.DepartmentId", võite lihtsalt kirjutada "USING(DepartmentID)".

Saate kasutada „JOIN .. KASUTAMINE” alati, kui veerud, mida ühendamise tingimuses võrrelda, on sama nimega. Sellistel juhtudel ei ole vaja neid korrata, kasutades tingimust ja lihtsalt märkige veergude nimed ja SQLite tuvastab selle.

Erinevus INNER JOINi ja JOINi vahel.. KASUTAMINE:

„JOIN … USING” korral ei kirjutata liitumistingimust, vaid kirjutatakse lihtsalt liitumisveeru number, mis on kahe ühendatud tabeli ühine. table1 asemel, et kirjutada „INNER JOIN table2 ON table1.cola = table2.cola”, kirjutame selle kujul „table1 JOIN table2 USING(cola)”.

Näide

Järgmises näites ühendame kaks tabelit „Õpilased“ ja „Osakonnad“ osakonnaId-ga, et saada iga õpilase osakonna nimi järgmiselt:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

Selgitus

  • Erinevalt eelmisest näitest ei kirjutanud me „ON Students.DepartmentId = Departments.DepartmentId“. Me kirjutasime lihtsalt „USING(DepartmentId)“.
  • SQLite järeldab automaatselt liitumise tingimuse ja võrdleb osakonna ID-d mõlemast tabelist – üliõpilased ja osakonnad.
  • Seda süntaksit saate kasutada alati, kui kaks võrreldavat veergu on sama nimega.

Väljund

See annab teile sama täpse tulemuse kui eelmine näide:

SQLite LIITU KASUTADES näidistulemust

SQLite LOODUSLIK LIITUMINE

LOODUSLIK LIITUMINE sarnaneb JOIN…KASUTAMISEGA, erinevus seisneb selles, et see testib automaatselt mõlemas tabelis iga veeru väärtuste võrdsust.

Erinevus INNER JOIN ja LOODUSLIKU LIITUMISE vahel:

  • INNER JOIN-is tuleb määrata liitumistingimus, mida sisemine ühendus kasutab kahe tabeli ühendamiseks. Loomulikus liitumises aga liitumistingimust ei kirjutata. Kirjutatakse lihtsalt kahe tabeli nimed ilma igasuguste tingimusteta. Seejärel kontrollib loomulik liitumine automaatselt mõlema tabeli iga veeru väärtuste võrdsust. Loomulik liitumine järeldab liitumistingimuse automaatselt.
  • Funktsioonis NATURAL JOIN sobitatakse kõik sama nimega tabeli veerud üksteisega. Näiteks kui meil on kaks tabelit kahe ühise veerunimega (kaks veergu on kahes tabelis sama nimega), siis loomulik liitmine ühendab kaks tabelit, võrreldes mõlema veeru väärtusi, mitte ainult ühe veeru väärtusi. veerus.

Näide

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

Selgitus

  • Me ei pea kirjutama liitumistingimust veerunimedega (nagu me tegime INNER JOIN-is). Me ei pidanud isegi veerunime üks kord kirjutama (nagu me tegime JOIN USING-is).
  • Loomulik liitmine skannib mõlema tabeli mõlemat veergu. See tuvastab, et tingimus peaks koosnema osakonna ID võrdlemisest mõlemas tabelis Õpilased ja Osakonnad.

Väljund

NATURAL JOIN annab täpselt sama väljundi kui INNER JOIN ja JOIN USING näited, sest meie näites on kõik kolm päringut samaväärsed. Kuid mõnel juhul erineb väljund sisemisest liitumisest loomuliku liitumise väljundist. Näiteks kui samade nimedega tabeleid on rohkem, siis loomulik liitumine sobitab kõik veerud omavahel. Sisemine liitumine aga sobitab ainult liitumistingimuses olevaid veerge.

SQLite NATURAL JOIN näite tulemus

SQLite VASAKU VÄLIMISE LIITUMINE

SQL-standard defineerib kolme tüüpi VÄLISI LIITUMISI: VASAK, PAREM ja TÄIS, aga SQLite toetab ainult loomulikku LEFT OUTTER JOIN.

LEFT OUTER JOIN puhul kaasatakse päringu tulemusse kõik vasakpoolsest tabelist valitud veergude väärtused, seega olenemata sellest, kas väärtus vastab liitumistingimusele või mitte, kaasatakse see tulemusse.

Seega, kui vasakpoolses tabelis on 'n' rida, on ka päringu tulemustes 'n' rida. Parempoolse tabeli veergude väärtuste puhul aga, kui mõni väärtus ei vasta liitmistingimusele, sisaldab see väärtust „null“.

Seega saate ridade arvu, mis on võrdne vasakpoolses ühenduses olevate ridade arvuga. Nii et saate mõlemast tabelist sobivad read (nt INNER JOIN tulemused) ja vasakpoolsest tabelist mittevastavad read.

Näide

Järgmises näites proovime "LEFT JOIN" kahe tabeli "Õpilased" ja "Osakonnad" ühendamiseks:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Selgitus

  • SQLite LEFT JOIN süntaks on sama mis INNER JOIN; kirjutad kahe tabeli vahele LEFT JOIN ja siis liitumise tingimus tuleb pärast ON-klauslit.
  • Esimene tabel pärast lauset from on vasakpoolne tabel. Kusjuures teine ​​tabel, mis on määratud pärast loomulikku LEFT JOIN'i, on õige tabel.
  • OUTER klausel on valikuline; LEFT natural OUTER JOIN on sama mis LEFT JOIN.

Väljund

Nagu näete, on kaasatud kõik õpilaste tabeli read, mis on kokku 10 õpilast. Isegi kui neljandal ja viimasel õpilasel, Jenal ja George'il, on osakonna ID-d, mida osakondade tabelis ei eksisteeri, on ka nemad kaasatud.

Ja nendel juhtudel on nii Jena kui ka George'i departmentName väärtus „null“, kuna osakondade tabelis puudub departmentName, mis vastaks nende departmentId väärtusele.

SQLite VASAK VÄLISE LIITUMISE näite tulemus

Selgitame eelmisele vasakpoolset liitu kasutavale päringule lähemalt Venni diagrammide abil:

SQLite VASAK VÄLIMINE ÜHENDUS Venni diagramm

VASAK LIITMINE annab kõigi õpilaste nimed õpilaste tabelist, isegi kui õpilasel on osakonna ID, mida osakondade tabelis ei eksisteeri. Seega päring ei anna sulle SISEMISE LIITMISENA ainult sobivaid ridu, vaid annab sulle ka lisaosa, mis sisaldab vasakpoolse tabeli, st õpilaste tabeli, sobivaid ridu.

Pange tähele, et iga õpilase nime puhul, millel pole ühtki osakonda, on osakonna nime jaoks nullväärtus, kuna sellel pole ühtki väärtust ja need väärtused on väärtused mittevastavates ridades.

SQLite RISTI LIITUMINE

CROSS JOIN annab kahe ühendatud tabeli valitud veergude jaoks Descartes'i korrutise, sobitades kõik esimese tabeli väärtused kõigi teise tabeli väärtustega.

Nii et iga esimese tabeli väärtuse jaoks saate teisest tabelist 'n' vastet, kus n on teise tabeli ridade arv.

Erinevalt funktsioonidest INNER JOIN ja LEFT OUTER JOIN ei pea ristliitumisfunktsiooni puhul liitmistingimust määrama, sest SQLite ei vaja seda ristühendamise jaoks.

. SQLite annab loogilise tulemuse, mis saadakse esimese tabeli kõigi väärtuste kombineerimisel kõigi teise tabeli väärtustega.

Näiteks kui valisite esimesest tabelist veeru (colA) ja teisest tabelist teise veeru (colB). ColA sisaldab kahte väärtust (1,2) ja colB sisaldab samuti kahte väärtust (3,4).

Siis on RISTLIITUMISE tulemuseks neli rida:

  • Kaks rida, kombineerides colA esimese väärtuse, mis on 1, veergude kahe väärtusega (3,4), mis on (1,3), (1,4).
  • Samamoodi kaks rida, kombineerides colA teise väärtuse, mis on 2, veergude kahe väärtusega (3,4), mis on (2,3), (2,4).

Näide

Järgmises päringus proovime üliõpilaste ja osakondade tabelite vahel CROSS JOIN'i:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

Selgitus

  • aasta SQLite vali mitmest tabelist, valisime lihtsalt õpilaste tabelist kaks veergu „studentname” ja osakondade tabelist „osakonna nimi”.
  • Ristliitumisel me ei määranud ühtegi liitumistingimust, vaid ainult kaks tabelit kombineeriti ja nende keskel oli ristliitumisfunktsioon.

Väljund

Nagu näete, on tulemuseks 40 rida; 10 väärtust õpilaste tabelist langesid kokku 4 osakonnaga osakondade tabelist. järgmiselt:

  • Nelja osakonna neli väärtust osakondade tabelist ühtisid esimese õpilase Micheliga.
  • Osakondade tabelist nelja osakonna kohta leiduvad neli väärtust vastasid teise õpilase, Johni, omadele.
  • Osakondade tabelist nelja osakonna jaoks leiduvad neli väärtust vastasid kolmanda õpilase Jacki omale... ja nii edasi.

SQLite RISTLIITUMISE näite tulemus

KKK

SQLite Versioonis 3.39.0, mis avaldati 2022. aastal, lisati RIGHT JOIN ja FULL OUTER JOIN tugi. Vanemates versioonides emuleeritakse RIGHT JOIN swapi abil.ping tabelid vasakpoolse ühendamise ja täieliku välise ühendamise teel, kombineerides kaks vasakpoolset ühendamist UNION-iga.

Iseliitumine liidab tabeli iseendaga tabeli aliaste abil, nii et üks koopia toimib vasakpoolse tabelina ja teine ​​parempoolse tabelina. See on kasulik sama tabeli ridade võrdlemiseks, näiteks töötajate ja nende juhtidega sobitamiseks.

Jah. Ühes SELECT-käsus aheldatakse mitu JOIN-klauslit, millel igaühel on oma ON- või USING-tingimus, näiteks FROM A JOIN B ON … JOIN C ON …. SQLite ühendab vasakult paremale jäävad tabelid üheks kombineeritud tulemuste komplektiks.

Ainult JOIN-i kirjutamine on sama mis INNER JOIN-i kirjutamine SQLiteMõlemad säilitavad ainult read, mis vastavad tingimusele ON või USING, seega jäetakse sobimatud read välja. Märksõna INNER on valikuline, mistõttu on JOIN ja INNER JOIN omavahel asendatavad.

Liitumistingimuses kasutatud veergudele indeksi loomine võimaldab SQLite ridu vastendada ilma terveid tabeleid skannimata, mis kiirendab suurte andmekogumite ühendamist. Võõrvõtme veergude indekseerimine ja statistika värskendamiseks käsu ANALYZE käivitamine parandavad veelgi ühendamispäringu jõudlust.

SISEMINE LIITMINE tagastab ainult read, mis vastavad mõlemas tabelis. VASAK VÄLINE LIITMINE tagastab kõik vasakpoolse tabeli read ja lisaks vastavad parempoolse tabeli read, täites vasteta parempoolsed veerud NULL-iga. Seega VASAK LIITMINE ei kustuta kunagi vasakpoolse tabeli ridu.

Jah. Tehisintellekti teksti SQL-iks teisendamise assistendid muudavad lihtsa inglise keele päringud SQLite INNER, LEFT, NATURAL ja CROSS JOIN laused. Tabelite ja veergude nimede ning seoste sisestamine parandab täpsust ning iga loodud ühendus tuleks enne reaalsete andmete peal käitamist üle vaadata ja testida.

GitHubi koopia soovitab SQLite LIITUMISPÄRINGUD tekstisiseselt redaktorites, näiteks VS Code, täites INNER JOIN, LEFT JOIN ja ON või USING klausleid. See loeb lähedalasuvaid skeeme ja kommentaare, seega selle soovitused taaskasutavad teie tegelikke tabeli ja veeru nimesid.

Võta see postitus kokku järgmiselt: