Tablice za spajanje SQLite: Unutarnje, Prirodno, Lijevo vanjsko, Poprečno (primjeri)

Sadržaj:

Anonim

SQLite podržava različite vrste SQL pridruživanja, poput INNER JOIN, LEFT OUTER JOIN i CROSS JOIN. Svaka vrsta PRIDRUŽIVANJA koristi se za drugačiju situaciju kao što ćemo vidjeti u ovom vodiču.

U ovom vodiču naučit ćete-

  • Uvod u klauzulu SQLite JOIN
  • UNUTARNJE PRIDRUŽIVANJE
  • PRIDRUŽITE SE ... KORIŠTENJU
  • PRIRODNI PRIDRUŽITI
  • LIJEVO VANJSKO PRIDRUŽITE
  • PRELAZI SE PRIDRUŽI

Uvod u klauzulu SQLite JOIN

Kada radite na bazi podataka s više tablica, često trebate dobiti podatke iz tih više tablica.

Klauzulom JOIN možete povezati dvije ili više tablica ili podupita pridruživanjem. Također, možete definirati kojim stupcem trebate povezati tablice i pod kojim uvjetima.

Bilo koja klauzula JOIN mora imati sljedeću sintaksu:

Svaka klauzula o pridruživanju sadrži:

  • Tablica ili podupit koji je lijeva tablica; tablicu ili podupit prije klauzule pridruživanja (s lijeve strane).
  • JOIN operator - navedite vrstu pridruživanja (bilo INNER JOIN, LEFT OUTER JOIN ili CROSS JOIN).
  • OGRANIČENJE PRIDRUŽIVANJA - nakon što ste odredili tablice ili podupitaje za pridruživanje, morate navesti ograničenje pridruživanja, što će biti uvjet na kojem će se odabrati odgovarajući retci koji odgovaraju tom uvjetu, ovisno o vrsti pridruživanja.

Imajte na umu da za sve sljedeće primjere morate pokrenuti sqlite3.exe i otvoriti vezu s uzorkom baze podataka kao tekuću:

Korak 1) U ovom koraku,

  1. Otvorite Moje računalo i prijeđite na sljedeći direktorij " C: \ sqlite " i
  2. Zatim otvorite " sqlite3.exe ":

Korak 2) Sljedećom naredbom otvorite bazu podataka " TutorialsSampleDB.db ":

Sada ste spremni pokrenuti bilo koju vrstu upita u bazi podataka.

SQLite INNER JOIN

INNER JOIN vraća samo retke koji se podudaraju s uvjetom pridruživanja i uklanja sve ostale retke koji se ne podudaraju s uvjetom pridruživanja.

Primjer

U sljedećem primjeru pridružit ćemo dvije tablice " Studenti " i " Odjeli " s DepartmentId kako bismo dobili naziv odsjeka za svakog studenta, kako slijedi:

IZABERIStudenti.Ime studenta,Odjeli.Ime odjelaOD učenikaUNUTARNJA PRIDRUŽITI Odjelima NA Studentima.DepartmentId = Departmani.DepartmentId;

Objašnjenje koda:

INNER JOIN radi na sljedeći način:

  • U klauzuli Select možete odabrati bilo koji stupac koji želite odabrati iz dvije referencirane tablice.
  • Klauzula INNER JOIN napisana je nakon prve tablice na koju se poziva klauzula "Od".
  • Tada se uvjet pridruživanja navodi s ON.
  • Za referencirane tablice mogu se navesti pseudonimi.
  • Riječ INNER nije obavezna, možete samo napisati PRIDRUŽITE SE.

Izlaz:

  • UNUTARNJE PRIDRUŽIVANJE izrađuje zapise iz oba - studenata i tablica odsjeka koji odgovaraju uvjetu koji je " S tudents.DepartmentId = Departments.DepartmentId ". Redovi bez premca bit će zanemareni i neće biti uključeni u rezultat.
  • Zbog toga je samo 8 učenika od 10 učenika vraćeno iz ovog upita s odjelima za informatiku, matematiku i fiziku. Dok studenti "Jena" i "George" nisu bili uključeni, jer imaju nulti ID odsjeka, koji se ne podudara s stupcem id odjela iz tablice odjela. Kako slijedi:

SQLite PRIDRUŽITE SE ... KORIŠTENJE

INNER JOIN se može napisati pomoću klauzule "USING" kako bi se izbjegla suvišnost, pa umjesto pisanja "ON Students.DepartmentId = Departments.DepartmentId", možete samo napisati "USING (DepartmentID)".

Možete koristiti "PRIDRUŽI SE ... KORIŠTENJE" kad god su stupci koje ćete usporediti u stanju pridruživanja istog imena. U takvim slučajevima nema potrebe da ih ponavljate koristeći uvjet i samo navedite imena stupaca i SQLite će to otkriti.

Razlika između UNUTARNJEG Pridruživanja i Pridruživanja… KORIŠTENJE:

Uz "PRIDRUŽITE SE

… KORIŠTENJE "ne napišete uvjet pridruživanja, već samo napišete stupac pridruživanja koji je zajednički između dviju spojenih tablica, umjesto pisanja tablice1" UNUTARNJE PRIDRUŽIVANJE tablice2 NA table1.cola = table2.cola "to napišemo kao" tablica1 PRIDRUŽI se tablici2 KORIŠTENJE (kola) ".

Primjer

U sljedećem primjeru pridružit ćemo dvije tablice " Studenti " i " Odjeli " s DepartmentId kako bismo dobili naziv odsjeka za svakog studenta, kako slijedi:

IZABERIStudenti.Ime studenta,Odjeli.Ime odjelaOD učenikaUNUTARNJE PRIDRUŽIVANJE Odjelima KORIŠTENJEM (DepartmentId);

Obrazloženje

  • Za razliku od prethodnog primjera, nismo napisali " ON Students.DepartmentId = Departments.DepartmentId ". Upravo smo napisali " USING (DepartmentId) ".
  • SQLite automatski utvrđuje uvjet pridruživanja i uspoređuje DepartmentId iz obje tablice - Studenti i Odjeli.
  • Ovu sintaksu možete koristiti kad god su dva stupca koja uspoređujete istog imena.

Izlaz

  • To će vam dati isti točan rezultat kao u prethodnom primjeru:

SQLite PRIRODNO PRIDRUŽIVANJE

PRIRODNO PRIDRUŽIVANJE slično je PRIDRUŽIVANJU ... KORIŠTENJEM, razlika je u tome što automatski testira jednakost između vrijednosti svakog stupca koji postoji u obje tablice.

Razlika između UNUTARNJEG PRIDRUŽIVANJA i PRIRODNOG PRIDRUŽIVANJA:

  • U UNUTARNJEM PRIDRUŽIVANJU morate navesti uvjet spajanja koji unutarnji spoj koristi za spajanje dviju tablica. Dok u prirodnom pridruživanju ne pišete uvjet pridruživanja. Samo napišete imena dviju tablica bez ikakvih uvjeta. Tada će prirodno spajanje automatski testirati jednakost vrijednosti za svaki stupac koji postoji u obje tablice. Prirodno spajanje automatski utvrđuje uvjet spajanja.
  • U NATURAL JOIN-u svi će se stupci iz obje tablice s istim nazivom međusobno podudarati. Na primjer, ako imamo dvije tablice s dva zajednička imena stupaca (dva stupca postoje s istim imenom u dvije tablice), tada će se prirodno pridruživanje pridružiti dvjema tablicama uspoređujući vrijednosti oba stupca, a ne samo iz jednog stupac.

Primjer

IZABERIStudenti.Ime studenta,Odjeli.Ime odjelaOD učenikaNatural Pridružite se odjelima;

Obrazloženje

  • Ne trebamo pisati uvjet pridruživanja s imenima stupaca (kao što smo to učinili u INNER JOIN). Čak niti jednom nismo trebali napisati naziv stupca (kao u PRIDRUŽIVANJU KORIŠTENJA).
  • Prirodno spajanje skenirat će oba stupca iz dvije tablice. Otkriće da bi se uvjet trebao sastojati od uspoređivanja DepartmentId iz obje tablice Studenti i Odjeli.

Izlaz

  • Natural JOIN će vam dati isti točan izlaz kao i izlaz koji smo dobili iz PRIMJERA UNUTARNJEG PRIDRUŽIVANJA i PRIDRUŽIVANJA. Jer su u našem primjeru sva tri upita jednaka. Ali u nekim će se slučajevima izlaz razlikovati od unutarnjeg spajanja nego u prirodnom. Na primjer, ako postoji više tablica s istim imenima, tada će se prirodno spajanje podudarati sa svim stupcima. Međutim, unutarnje spajanje podudarat će se samo sa stupcima u stanju spajanja (više detalja u sljedećem odjeljku; razlika između unutarnjeg spajanja i prirodnog spajanja).

SQLite LIJEVO VANJSKO PRIDRUŽITE

SQL standard definira tri vrste VANJSKIH PRIDRUŽENJA: LIJEVO, DESNO i PUNO, ali SQLite podržava samo LIJEVO VANJSKO PRIDRUŽIVANJE.

U LIJEVOM VANJSKOM PRIDRUŽIVANJU, sve vrijednosti stupaca koje odaberete iz lijeve tablice bit će uključene u rezultat upita, pa će, bez obzira na vrijednost koja se podudara s uvjetom pridruživanja, biti uključene u rezultat.

Dakle, ako lijeva tablica ima 'n' redaka, rezultati upita će imati 'n' redaka. Međutim, za vrijednosti stupaca koji dolaze iz desne tablice, ako bilo koja vrijednost koja se ne podudara s uvjetom pridruživanja, sadržavat će vrijednost "null".

Tako ćete dobiti broj redaka ekvivalentan broju redaka u lijevom spoju. Tako ćete dobiti odgovarajuće retke iz obje tablice (poput rezultata INNER JOIN), plus nepodudarne retke iz lijeve tablice.

Primjer

U sljedećem ćemo primjeru pokušati "LIJEVO PRIDRUŽITI" da se pridruži dvije tablice "Studenti" i "Odjeli":

IZABERIStudenti.Ime studenta,Odjeli.Ime odjelaOD učenika - ovo je lijeva tablicaLIJEVO PRIDRUŽITE SE ODJELIMA NA Studentima.DepartmentId = Departmani.DepartmentId;

Obrazloženje

  • Sintaksa LEFT JOIN ista je kao INNER JOIN; napišete LEFT JOIN između dvije tablice, a zatim uvjet pridruživanja dolazi nakon klauzule ON.
  • Prva tablica nakon klauzule from je lijeva tablica. Dok je druga tablica navedena nakon lijevog spajanja desna tablica.
  • Klauzula OUTER nije obavezna; LIJEVO VANJSKO PRIDRUŽIVANJE isto je što i LIJEVO PRIDRUŽIVANJE.

Izlaz

  • Kao što vidite, uključeni su svi retci iz tablice učenika, što ukupno čini 10 učenika. Čak i ako četvrti i posljednji student, Jena i George odsjeci ID-a ne postoje u tablici Odjela, oni su također uključeni.
  • A u tim će slučajevima vrijednost odjelaName i za Jenu i Georgea biti "null", jer tablica odjela nema ime odjeljenja koje odgovara njihovoj vrijednosti odsjeka.

Dajmo prethodni upit koristeći lijevo spajanje dubljeg objašnjenja pomoću Van dijagrama:

LEFT JOIN će dati svim studentima imena iz tablice učenika, čak i ako student ima ID odsjeka koji ne postoji u tablici odjela. Dakle, upit vam neće dati samo odgovarajuće retke kao UNUTARNJE PRIDRUŽIVANJE, već će vam dati dodatni dio koji ima neusklađene retke iz lijeve tablice koja je tablica učenika.

Imajte na umu da će bilo koje ime učenika koje nema podudarni odjel imati "null" vrijednost za naziv odjela, jer za njega ne postoji podudarna vrijednost, a te su vrijednosti vrijednosti u retcima koji se ne podudaraju.

SQLite CROSS PRIDRUŽITE SE

CROSS JOIN daje kartezijanski proizvod za odabrane stupce dviju spojenih tablica, podudaranjem svih vrijednosti iz prve tablice sa svim vrijednostima iz druge tablice.

Dakle, za svaku vrijednost u prvoj tablici dobit ćete 'n' podudaranja iz druge tablice, gdje je n broj redaka druge tablice.

Za razliku od INNER JOIN i LEFT OUTER JOIN, kod CROSS JOIN ne morate navesti uvjet pridruživanja, jer SQLite to ne treba za CROSS JOIN.

SQLite će rezultirati logičkim rezultatima koji se kombiniraju kombiniranjem svih vrijednosti iz prve tablice sa svim vrijednostima iz druge tablice.

Na primjer, ako ste odabrali stupac iz prve tablice (colA) i drugi stupac iz druge tablice (colB). ColA sadrži dvije vrijednosti (1,2), a colB također sadrži dvije vrijednosti (3,4).

Tada će rezultat CROSS JOIN biti četiri reda:

  • Dva retka kombiniranjem prve vrijednosti iz colA koja je 1 s dvije vrijednosti colB (3,4) koje će biti (1,3), (1,4).
  • Isto tako, dva retka kombiniranjem druge vrijednosti iz colA koja je 2 s dvije vrijednosti colB (3,4) koje su (2,3), (2,4).

Primjer

U sljedećem upitu pokušat ćemo CROSS JOIN između tablica Studenti i Odjeli:

IZABERIStudenti.Ime studenta,Odjeli.Ime odjelaOD učenikaCROSS JOIN Odjeli;

Obrazloženje

  • U klauzuli za odabir upravo smo odabrali dva stupca "ime učenika" iz tablice učenika i "imeNa odjela" iz tablice odjeljenja.
  • Za poprečno spajanje nismo naveli nijedan uvjet spajanja, već samo dvije tablice kombinirane s CROSS JOIN usred njih.

Izlaz:

Kao što vidite, rezultat je 40 redaka; 10 vrijednosti iz tablice učenika podudaralo se s 4 odjela iz tablice odjela. Kako slijedi:

  • Četiri vrijednosti za četiri odjela iz tablice odjela podudaraju se s prvim studentom Michelom.
  • Četiri vrijednosti za Četiri odjela iz tablice odjela podudaraju se s drugim studentom Ivanom.
  • Četiri vrijednosti za Četiri odjela iz tablice odjela podudaraju se s trećim studentom Jackom.

    … i tako dalje.

Sažetak

Korištenjem SQLite JOIN-ova možete povezati jednu ili više tablica ili podupita kako biste odabrali stupce iz obje tablice ili podupita.