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.

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:
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”:
Step 2) Ava andmebaas „TutorialsSampleDB.db” järgmise käsuga:
Nüüd olete valmis käivitama andmebaasis mis tahes tüüpi päringuid.
SQLite INNER JOIN
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.
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 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 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 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.
Selgitame eelmisele vasakpoolset liitu kasutavale päringule lähemalt Venni diagrammide abil:
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.











