„SQLite“ prisijungimo lentelės: vidinis, natūralus, kairysis išorinis, kryžminis (pavyzdžiai)

Turinys:

Anonim

„SQLite“ palaiko įvairius SQL prisijungimo tipus, tokius kaip INNER JOIN, LEFT OUTER JOIN ir CROSS JOIN. Kiekvienas JOIN tipas naudojamas skirtingai situacijai, kaip matysime šioje pamokoje.

Šioje pamokoje sužinosite

  • Įvadas į SQLite JOIN sąlygą
  • VIDINIS PRISIJUNGIMAS
  • PRISIJUNGTI ... NAUDOTI
  • GAMTINIS PRISIJUNGIMAS
  • Kairysis išorinis prisijungimas
  • PRISIJUNGTI

Įvadas į SQLite JOIN sąlygą

Kai dirbate duomenų bazėje, kurioje yra kelios lentelės, dažnai reikia gauti duomenis iš šių kelių lentelių.

Naudodamiesi JOIN sąlyga, galite susieti dvi ar daugiau lentelių ar paklausų jas sujungdami. Be to, galite apibrėžti, pagal kurį stulpelį turite susieti lenteles ir kokiomis sąlygomis.

Bet kuri JOIN sąlyga turi turėti šią sintaksę:

Kiekvienoje prisijungimo sąlygoje yra:

  • Lentelė arba antrinė užklausa, kuri yra kairė lentelė; lentelę arba antrinę užklausą prieš jungimo sąlygą (kairėje jos pusėje).
  • JOIN operatorius - nurodykite prisijungimo tipą (INNER JOIN, LEFT OUTER JOIN arba CROSS JOIN).
  • JOIN-apribojimas - po to, kai nurodote lenteles ar paklausas, prie kurių norite prisijungti, turite nurodyti prisijungimo apribojimą, kuris bus sąlyga, pagal kurią bus parenkamos tą sąlygą atitinkančios eilutės, atsižvelgiant į prisijungimo tipą.

Atminkite, kad visų šių pavyzdžių atveju turite paleisti sqlite3.exe ir atidaryti ryšį su pavyzdine duomenų baze:

1 žingsnis) Šiame žingsnyje

  1. Atidarykite „Mano kompiuteris“ ir eikite į šį katalogą „ C: \ sqlite “ ir
  2. Tada atidarykite „ sqlite3.exe “:

2 žingsnis. Atidarykite duomenų bazę „ TutorialsSampleDB.db “ atlikdami šią komandą:

Dabar esate pasirengę vykdyti bet kokio tipo užklausas duomenų bazėje.

SQLite VIDINIS PRISIJUNGIMAS

INNER JOIN pateikia tik tas eilutes, kurios atitinka prisijungimo sąlygą ir pašalina visas kitas eilutes, kurios neatitinka prisijungimo sąlygos.

Pavyzdys

Šiame pavyzdyje mes sujungsime dvi lenteles „ Studentai “ ir „ Departamentai “ su „ DepartmentId “, kad gautume kiekvieno studento katedros pavadinimą:

PASIRINKTIStudentai. Studento vardas,Departamentai. Departamento pavadinimasIŠ studentųINNER JOIN Departamentai ON Students.DepartmentId = Departments.DepartmentId;

Kodo paaiškinimas:

„INNER JOIN“ veikia taip:

  • Sąlygoje Pasirinkti iš dviejų nurodytų lentelių galite pasirinkti bet kokius stulpelius, kuriuos norite pasirinkti.
  • Sąlyga „INNER JOIN“ rašoma po pirmosios lentelės, nurodant sąlygą „Nuo“.
  • Tada jungimo sąlyga nurodoma įjungus ON.
  • Nurodytų lentelių slapyvardžius galima nurodyti.
  • INNER žodis yra neprivalomas, galite tiesiog parašyti JOIN.

Išvestis:

  • „INNER JOIN“ rengia įrašus iš abiejų - studentų ir katedros lentelių, atitinkančių sąlygą „ S tudents.DepartmentId = Departments.DepartmentId “. Neatitinkančios eilutės bus ignoruojamos ir nebus įtrauktos į rezultatą.
  • Štai kodėl IT, matematikos ir fizikos skyriuose iš šios užklausos buvo grąžinti tik 8 studentai iš 10 studentų. Studentai „Jena“ ir „George“ nebuvo įtraukti, nes jie turi nulinį skyriaus ID, kuris neatitinka „DepartmentId“ stulpelio iš skyrių lentelės. Taip:

SQLite PRISIJUNGTI ... NAUDOTI

„INNER JOIN“ gali būti parašyta naudojant sąlygą „NAUDOJIMAS“, kad būtų išvengta nereikalingumo, todėl užuot rašę „ON Students.DepartmentId = Departments.DepartmentId“, galite tiesiog parašyti „USING (DepartmentID)“.

Galite naudoti „JUNGTI ... NAUDOTI“, kai stulpeliai, kuriuos palyginsite prisijungimo sąlygoje, yra to paties pavadinimo. Tokiais atvejais nereikia jų kartoti naudojant sąlygą on ir tiesiog nurodykite stulpelių pavadinimus, o SQLite tai aptiks.

Skirtumas tarp INNER JOIN ir JOIN ... NAUDOJIMAS:

Su „JUNGTI

... NAUDOJANT "jūs nerašote prisijungimo sąlygos, tiesiog rašote prisijungimo stulpelį, kuris yra bendras tarp dviejų sujungtų lentelių, užuot rašęs lentelę1" INNER JOIN table2 ON table1.cola = table2.cola "mes ją rašome kaip" lentelė1 PRISIJUNGTI lentelę2 NAUDOJANT (kola) ".

Pavyzdys

Šiame pavyzdyje mes sujungsime dvi lenteles „ Studentai “ ir „ Departamentai “ su „ DepartmentId “, kad gautume kiekvieno studento katedros pavadinimą:

PASIRINKTIStudentai. Studento vardas,Departamentai. Departamento pavadinimasIŠ studentųINNER JOIN Skyriai NAUDOJAMI (DepartmentId);

Paaiškinimas

  • Skirtingai nuo ankstesnio pavyzdžio, mes nerašėme „ ON Students.DepartmentId = Departments.DepartmentId “. Mes ką tik parašėme „ NAUDOTI (DepartmentId) “.
  • SQLite automatiškai daro išvadą apie prisijungimo sąlygą ir palygina DepartmentId iš abiejų lentelių - Studentų ir Departamentų.
  • Šią sintaksę galite naudoti, kai du lyginami stulpeliai yra su tuo pačiu pavadinimu.

Rezultatas

  • Tai suteiks jums tą patį tikslų rezultatą kaip ir ankstesniame pavyzdyje:

SQLite NATŪRALUS PRISIJUNGIMAS

NATŪRALUS PRISIJUNGIMAS yra panašus į PRISIJUNGIMĄ ... NAUDOJIMAS, skirtumas yra tas, kad jis automatiškai patikrina kiekvieno stulpelio, esančio abiejose lentelėse, verčių lygybę.

Skirtumas tarp vidinio prisijungimo ir natūralaus prisijungimo:

  • n VIDINĖ prisijungti, turite nurodyti JOIN būklę kurio vidinis prisijungti naudojimas prisijungti prie dviejų stalų. Natūralaus sujungimo metu jūs nerašote prisijungimo sąlygos. Jūs tiesiog rašote dviejų lentelių pavadinimus be jokių sąlygų. Tada natūralus sujungimas automatiškai patikrins kiekvieno stulpelio reikšmių lygybę abiejose lentelėse. Natūralus sujungimas automatiškai nustato sujungimo sąlygą.
  • Natūraliame prisijungime visi stulpeliai iš abiejų lentelių su tuo pačiu pavadinimu bus suderinti vienas su kitu. Pvz., Jei mes turime dvi lenteles su dviem stulpelių pavadinimais (dvi stulpeliai egzistuoja tuo pačiu pavadinimu dviejose lentelėse), natūralus sujungimas sujungs dvi lenteles lygindamas abiejų stulpelių vertes, o ne tik iš vienos stulpelį.

Pavyzdys

PASIRINKTIStudentai. Studento vardas,Departamentai. Departamento pavadinimasIŠ studentųNatūralūs JOIN skyriai;

Paaiškinimas

  • Mums nereikia rašyti prisijungimo sąlygos su stulpelių pavadinimais (kaip tai darėme INNER JOIN). Mums net nereikėjo vieną kartą rašyti stulpelio pavadinimo (kaip tai darėme JUNGTIS NAUDOJANT).
  • Natūralus sujungimas nuskaitys abu stulpelius iš dviejų lentelių. Tai nustatys, kad sąlyga turėtų būti sudaryta lyginant „DepartmentId“ iš abiejų lentelių „Studentai“ ir „Department“.

Rezultatas

  • Natūralus JOIN suteiks jums tokią pačią tikslią išvestį, kokią gavome iš INNER JOIN ir JOIN USING pavyzdžių. Nes mūsų pavyzdyje visos trys užklausos yra lygiavertės. Tačiau kai kuriais atvejais išvestis skirsis nuo vidinio sujungimo, tada natūralaus sujungimo metu. Pvz., Jei yra daugiau lentelių su tais pačiais pavadinimais, natūralus sujungimas atitiks visus stulpelius. Tačiau vidinis sujungimas atitiks tik sujungimo sąlygos stulpelius (daugiau informacijos apie kitą skyrių; skirtumas tarp vidinio sujungimo ir natūralaus sujungimo).

SQLite Kairysis išorinis prisijungimas

SQL standartas apibrėžia tris OUTER JOIN tipus: LEFT, RIGHT ir FULL, tačiau SQLite palaiko tik LEFT OUTER JOIN.

Skiltyje LEFT OUTER JOIN visos kairėje lentelėje pasirinktų stulpelių vertės bus įtrauktos į užklausos rezultatą, taigi, neatsižvelgiant į tai, ar vertė atitinka prisijungimo sąlygą, ar ne, ji bus įtraukta į rezultatą.

Taigi, jei kairėje lentelėje yra „n“ eilučių, užklausos rezultatuose bus „n“ eilučių. Tačiau stulpelių, einančių iš dešinės lentelės, reikšmėms, jei reikšmė neatitinka prisijungimo sąlygos, joje bus „nulinė“ reikšmė.

Taigi gausite eilučių skaičių, atitinkantį kairės jungties eilučių skaičių. Taigi gausite atitinkamas abiejų lentelių eilutes (pvz., „INNER JOIN“ rezultatai), taip pat kairiosios lentelės neatitinkančias eilutes.

Pavyzdys

Šiame pavyzdyje bandysime „Kairysis prisijungimas“ prisijungti prie dviejų lentelių „Studentai“ ir „Departamentai“:

PASIRINKTIStudentai. Studento vardas,Departamentai. Departamento pavadinimasIŠ studentų - tai kairė lentelėLEFT JOIN Departamentai ON Students.DepartmentId = Departments.DepartmentId;

Paaiškinimas

  • LEFT JOIN sintaksė yra tokia pati kaip INNER JOIN; tarp dviejų lentelių įrašote LEFT JOIN, tada jungimo sąlyga atsiranda po sąlyga ON.
  • Pirmoji lentelė po sakinio yra kairė lentelė. Antroji lentelė, nurodyta po kairiojo sujungimo, yra dešinė lentelė.
  • Sąlyga OUTER yra neprivaloma; LEFT OUTER JOIN yra tas pats, kas LEFT JOIN.

Rezultatas

  • Kaip matote, įtraukiamos visos studentų lentelės eilutės, iš viso 10 studentų. Net jei „Departamentų“ lentelėje nėra ketvirtojo ir paskutinio studento „Jena“ ir „George departmentIds“, jie taip pat yra įtraukti.
  • Šiais atvejais „Jena“ ir „George“ „departmentName“ reikšmė bus „nulinė“, nes skyrių lentelėje nėra skyriausName, atitinkančio jų „DepartmentId“ vertę.

Pateiksime ankstesnę užklausą naudodami kairįjį sujungimą, gilesnį paaiškinimą naudodami Van diagramas:

Kairysis prisijungimas suteiks visiems studentams vardus iš studentų lentelės, net jei studentas turi katedros ID, kurio skyrių lentelėje nėra. Taigi, užklausa nesuteiks jums tik atitinkančių eilučių kaip INNER JOIN, bet suteiks papildomą dalį, kurioje yra nesutampančios eilutės iš kairės lentelės, kuri yra studentų lentelė.

Atminkite, kad bet kurio studento vardo, kuriame nėra atitinkamo skyriaus, katedros pavadinimo reikšmė bus „nulinė“, nes jai nėra atitinkamos vertės, o šios vertės yra neatitinkančių eilučių vertės.

SQLite Kryžminis prisijungimas

CROSS JOIN pateikia pasirinktų dviejų sujungtų lentelių stulpelių derinį, suderindamas visas pirmosios lentelės reikšmes su visomis antrosios lentelės vertėmis.

Taigi už kiekvieną pirmosios lentelės vertę gausite „n“ atitikmenis iš antrosios lentelės, kur n yra antros lentelės eilučių skaičius.

Skirtingai nuo INNER JOIN ir LEFT OUTER JOIN, naudojant CROSS JOIN, jums nereikia nurodyti prisijungimo sąlygos, nes SQLite jos nereikia CROSS JOIN.

SQLite sukurs loginius rezultatus, sujungus visas pirmosios lentelės reikšmes su visomis antrosios lentelės reikšmėmis.

Pavyzdžiui, jei pasirinkote stulpelį iš pirmos lentelės (colA) ir kitą stulpelį iš antros lentelės (colB). ColA yra dvi reikšmės (1,2), o colB taip pat yra dvi reikšmės (3,4).

Tada „CROSS JOIN“ rezultatas bus keturios eilutės:

  • Dvi eilutės sujungiant pirmąją colA reikšmę, kuri yra 1, su dviem colB (3,4) reikšmėmis, kurios bus (1,3), (1,4).
  • Panašiai dvi eilutės sujungiant antrąją colA reikšmę, kuri yra 2, su dviem colB (3,4) reikšmėmis, kurios yra (2,3), (2,4).

Pavyzdys

Šioje užklausoje bandysime CROSS JOIN tarp studentų ir katedrų lentelių:

PASIRINKTIStudentai. Studento vardas,Departamentai. Departamento pavadinimasIŠ studentųCROSS JOIN skyriai;

Paaiškinimas

  • Pasirinkimo sąlygoje mes tiesiog pasirinkome du stulpelius „studentname“ iš studentų lentelės ir „departmentName“ iš skyrių lentelės.
  • Kryžminio sujungimo atveju nenurodėme jokių sujungimo sąlygų, tik dvi lentelės kartu su CROSS JOIN jų viduryje.

Išvestis:

Kaip matote, rezultatas yra 40 eilučių; 10 vertybių iš studentų lentelės atitiko 4 skyrius iš skyrių lentelės. Taip:

  • Keturios katedros lentelės keturios katedros reikšmės atitiko pirmąjį studentą Michelį.
  • Keturios katedros lentelės keturios katedros reikšmės atitiko antrąjį studentą Joną.
  • Keturios katedros lentelės keturios katedros reikšmės sutapo su trečiuoju studentu Džeku.

    … ir taip toliau.

Santrauka

Naudodami „SQLite JOIN“, galite susieti vieną ar daugiau lentelių ar porūšių, kad pasirinktumėte stulpelius iš abiejų lentelių ar antrinių užklausų.