SQLite Liitumine: Looduslik vasak välimine, sisemine, rist koos tabelitega Näide

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

  1. Avage Minu arvuti ja liikuge järgmisse kataloogi "C:\sqlite"Ja
  2. Seejärel avage "sqlite3.exe"

SQLite JOIN klausel

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

SQLite JOIN klausel

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

SQLite INNER JOIN

INNER JOIN tagastab ainult need read, mis vastavad liitumise tingimusele, ja kõrvaldab kõik muud read, mis ei vasta liitumise tingimusele.

SQLite INNER JOIN
SQLite INNER JOIN

Näide

Järgmises näites ühendame kaks tabelit "Õpilased"Ja"Osakonnad” koos DepartmentId-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

SQLite INNER JOIN Näide

  • INNER JOIN toodab kirjed mõlemast – üliõpilaste ja osakonna tabelitest, mis vastavad tingimusele, mis on "Students.DepartmentId = Osakonnad.OsakonnaId “. Sobimatuid ridu ignoreeritakse ja neid ei kaasata tulemusesse.
  • Seetõttu tagastati sellest päringust vaid 8 õpilast 10 õpilasest IT-, matemaatika- ja füüsikaosakonnaga. Kusjuures õpilasi “Jena” ja “George” ei arvestatud, kuna neil on null osakonna ID, mis ei ühti osakondade tabelis oleva osakonna ID veeruga. järgmiselt:

    SQLite INNER JOIN Näide

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 JOIN ja JOIN vahel .. KASUTAMINE:

Funktsiooniga "JOIN … KASUTAMINE" te ei kirjuta liitumise tingimust, kirjutate lihtsalt liitumisveeru, mis on ühine kahe ühendatud tabeli vahel, selle asemel, et kirjutada tabel1 "INNER JOIN table2 ON table1.cola = tabel2.cola" see nagu "tabel1 LIITUMINE laua2 KASUTAMISEGA (cola)".

Näide

Järgmises näites ühendame kaks tabelit "Õpilased"Ja"Osakonnad” koos DepartmentId-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 just kirjutasime "KASUTAMINE (osakonna ID)".
  • 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 Näide

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:

  • Funktsioonis INNER JOIN peate määrama liitumise tingimuse, mida sisemine liitmine kasutab kahe tabeli ühendamiseks. Kui loomulikus ühenduses te liitumise tingimust ei kirjuta. Kirjutate lihtsalt kahe tabeli nimed ilma tingimusteta. Seejärel testib loomulik liitmine automaatselt mõlemas tabelis iga veeru väärtuste võrdsust. Loomulik liitmine järeldab automaatselt liitumise tingimuse.
  • 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 veerunimedega liitumistingimust kirjutama (nagu tegime INNER JOINis). Me ei pidanud isegi veeru nime üks kord kirjutama (nagu tegime LIITUMISE KASUTAMISE puhul).
  • 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

SQLite LOODUSLIK LIITUMINE Näide

  • Natural JOIN annab teile sama täpse väljundi kui väljund, mille saime näidetest INNER JOIN ja JOIN USING. Sest meie näites on kõik kolm päringut samaväärsed. Kuid mõnel juhul erineb väljund sisemisest ühendusest ja loomulikust ühendusest. Näiteks kui sama nimega tabeleid on rohkem, siis loomulik liitmine sobitab kõik veerud üksteise vastu. Sisemine ühendus sobib aga ainult liitumistingimuses olevate veergudega (lisateavet leiate järgmisest jaotisest; sisemise ja loomuliku ühenduse erinevus).

SQLite VASAKU VÄLIMISE LIITUMINE

SQL-standard määratleb kolme tüüpi VÄLISI LIITUMISI: LEFT, RIGHT ja FULL, kuid SQLite toetab ainult loomulikku LEFT OUTTER JOIN.

LEFT OUTER JOIN puhul kaasatakse vasakpoolsest tabelist valitud veergude kõik väärtused päringu, nii et olenemata sellest, kas väärtus vastab liitumise tingimusele või mitte, kaasatakse see tulemusesse.

Nii et kui vasakpoolses tabelis on n rida, on päringu tulemustes n rida. Parempoolsest tabelist pärinevate veergude väärtuste puhul sisaldab see aga nullväärtust, kui mõni väärtus, mis ei vasta liitumise tingimusele.

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

SQLite LEFT OUTTER JOIN Näide

  • Nagu näete, on kaasatud kõik õpilaste tabeli read, mis on kokku 10 õpilast. Isegi kui neljandat ja viimast õpilast, Jena ja George'i osakonna ID-d tabelis Osakonnad ei eksisteeri, on need samuti kaasatud.
  • Ja sellistel juhtudel on DepartmentName väärtus nii Jena kui ka George'i jaoks "null", kuna osakondade tabelis ei ole osakonnaNimi, mis vastaks nende osakonna ID väärtusele.

Anname eelmisele päringule vasakpoolse liitumise ja põhjalikuma selgituse Van diagrammide abil:

SQLite VASAKU VÄLIMISE LIITUMINE

SQLite VASAKU VÄLIMISE LIITUMINE

LEFT JOIN annab kõikidele õpilastele õpilaste tabelist nimed, isegi kui õpilasel on osakonna ID, mida osakondade tabelis pole. Seega ei anna päring teile SISEMISE LIITUMISENA ainult sobivaid ridu, vaid annab teile lisaosa, millel on mittevastavad read vasakpoolsest tabelist, mis on õpilaste tabel.

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 INNER JOIN-ist ja LEFT OUTTER JOIN-ist ei pea te RISTÜHENDAMISE puhul liitumise tingimust määrama, kuna SQLite ei vaja seda RISTLIITUMISE jaoks.

. SQLite tulemuseks on loogilised tulemused, mis määratakse, kombineerides kõik esimese tabeli väärtused kõigi teise tabeli väärtustega.

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

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”.
  • Ristliitmise jaoks ei määranud me ühtegi liitumistingimust, vaid kaks tabelit, mis on kombineeritud ristühendusega nende keskel.

Väljund

SQLite RISTLIITUMINE Näide

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 tabelis oleva nelja osakonna neli väärtust ühtisid teise õpilase Johniga.
  • Osakondade tabelis oleva nelja osakonna neli väärtust sobitusid kolmanda õpilase Jackiga… ja nii edasi.

kokkuvõte

Kasutamine SQLite JOIN päringuga saate linkida ühe või mitu tabelit või alampäringut, et valida mõlemast tabelist või alampäringust veerud.

Võta see postitus kokku järgmiselt: