SQLite csatlakozási táblák: Belső, Természetes, Balra Külső, Kereszt (Példák)

Tartalomjegyzék:

Anonim

Az SQLite különféle típusú SQL csatlakozásokat támogat, például a BELSŐ CSATLAKOZTATÁST, a LEFT OUTER CSATLAKOZÁST és a CROSS JOIN csatlakozást. A JOIN minden egyes típusát más helyzetben használják, amint ezt az oktatóanyagban láthatjuk.

Ebben az oktatóanyagban megtanulja-

  • Bevezetés az SQLite JOIN záradékába
  • BELSŐ ÖSSZEKAPCSOLÁS
  • Csatlakozzon ... HASZNÁLJA
  • TERMÉSZETES CSATLAKOZÁS
  • BAL KÜLSŐ CSATLAKOZÁS
  • KERESZTI CSATLAKOZÁS

Bevezetés az SQLite JOIN záradékába

Ha több táblázattal rendelkező adatbázison dolgozik, gyakran adatokat kell beszereznie ezekből a több táblából.

A JOIN záradékkal összekapcsolhat két vagy több táblázatot vagy allekérdezést. Azt is megadhatja, hogy mely oszlopot kell összekapcsolnia a táblákkal és milyen feltételekkel.

Bármely JOIN záradéknak a következő szintaxissal kell rendelkeznie:

Minden egyesítési záradék a következőket tartalmazza:

  • Táblázat vagy allekérdezés, amely a bal oldali táblázat; a tábla vagy az alkérdezés a csatlakozási záradék előtt (annak bal oldalán).
  • JOIN operátor - adja meg a csatlakozás típusát (vagy BELSŐ JOIN, LEFT OUTER JOIN vagy CROSS JOIN).
  • JOIN-kényszer - miután megadta a csatlakozni kívánt táblákat vagy allekérdezéseket, meg kell adnia egy csatlakozási korlátozást, amely egy feltétel lesz, amelyen az adott feltételnek megfelelő illeszkedő sorok a csatlakozás típusától függően kerülnek kiválasztásra.

Vegye figyelembe, hogy a következő példák mindegyikéhez futtatnia kell az sqlite3.exe fájlt, és áramlásként meg kell nyitnia a kapcsolatot a minta adatbázissal:

1. lépés) Ebben a lépésben

  1. Nyissa meg a Sajátgép elemet, és keresse meg a következő könyvtárat: " C: \ sqlite " és
  2. Ezután nyissa meg az " sqlite3.exe " fájlt :

2. lépés: Nyissa meg a " TutorialsSampleDB.db " adatbázist a következő paranccsal:

Most már készen áll bármilyen típusú lekérdezés futtatására az adatbázisban.

SQLite BELSŐ CSATLAKOZÁS

A BELSŐ CSATLAKOZÁS csak azokat a sorokat adja vissza, amelyek megfelelnek a csatlakozási feltételnek, és kiküszöbölik az összes olyan sort, amely nem felel meg a csatlakozási feltételnek.

Példa

A következő példában egyesítjük a két „ Diákok ” és „ Tanszékek ” táblázatot a DepartmentId-vel, hogy megkapjuk az egyes hallgatók tanszéknevét, az alábbiak szerint:

SELECTDiákok.StudentName,Departments.DepartmentNameA hallgatóktólBELSŐ CSATLAKOZÁS Osztályok ON Students.DepartmentId = Departments.DepartmentId;

A kód magyarázata:

Az INNER JOIN a következőképpen működik:

  • A Select záradékban kiválaszthatja a kívánt oszlopokat a két hivatkozott táblázat közül.
  • Az INNER JOIN záradék az első, a "From" záradékkal hivatkozott táblázat után íródik.
  • Ezután a csatlakozás feltételét ON értékkel adjuk meg.
  • A hivatkozott táblákhoz álnevek adhatók meg.
  • A BELSŐ szó választható, csak a CSATLAKOZÁST írhatja.

Kimenet:

  • Az INNER JOIN mind a hallgatók, mind a tanszék táblázataiból készíti a rekordokat, amelyek megfelelnek a " S tudents.DepartmentId = Departments.DepartmentId " feltételnek. A páratlan sorokat a rendszer figyelmen kívül hagyja, és nem tartalmazza az eredmény.
  • Ezért 10 diákból csak 8 hallgatót tértek vissza ebből a lekérdezésből az informatika, matematika és fizika osztályokkal. Míg a "Jena" és a "George" hallgatókat nem vettük fel, mert null osztályazonosítójuk van, amely nem egyezik meg a DepartmentId oszloppal az osztályok táblázatában. Mint a következő:

SQLite JOIN… HASZNÁLAT

A BELSŐ CSATLAKOZÁS a "USING" záradékkal írható a redundancia elkerülése érdekében, így az "ON Students.DepartmentId = Departments.DepartmentId" helyett csak "USING (DepartmentID)" írhat.

Akkor használhatja a „JOIN… USING” lehetőséget, ha a csatlakozási feltételben összehasonlítandó oszlopok azonos nevűek. Ilyen esetekben nincs szükség az on feltétel használatával megismételni őket, és csak meg kell adni az oszlopneveket, és az SQLite észlelni fogja.

A Belső Csatlakozás és a Csatlakozás közötti különbség… HASZNÁLAT:

A "JOIN

... HASZNÁLATAL "nem írsz egy csatlakozási feltételt, csak írd az egyesítés oszlopot, amely közös a két összekapcsolt táblázat között, ahelyett, hogy 1. táblát írnád" INNER JOIN tábla2 BE tábla1.cola = tábla2.cola "úgy írjuk" table1 JOIN table2 USING (cola) ".

Példa

A következő példában egyesítjük a két „ Diákok ” és „ Tanszékek ” táblázatot a DepartmentId-vel, hogy megkapjuk az egyes hallgatók tanszéknevét, az alábbiak szerint:

SELECTDiákok.StudentName,Departments.DepartmentNameA hallgatóktólBELSŐ CSATLAKOZÁS Osztályok USING (DepartmentId);

Magyarázat

  • Az előző példával ellentétben nem azt írtuk, hogy " ON Students.DepartmentId = Departments.DepartmentId ". Most írtuk: " USING (DepartmentId) ".
  • Az SQLite automatikusan megállapítja a csatlakozási feltételt, és összehasonlítja a DepartmentId-t a táblákból - Diákok és Tanszékek.
  • Akkor használhatja ezt a szintaxist, ha az összehasonlítani kívánt két oszlop azonos névvel rendelkezik.

Kimenet

  • Ez pontosan ugyanazt az eredményt adja, mint az előző példa:

SQLite TERMÉSZETES CSATLAKOZÁS

A TERMÉSZETES CSATLAKOZÁS hasonló a JOIN… FELHASZNÁLÁSHOZ, a különbség az, hogy automatikusan teszteli az egyenlőséget minden oszlop értéke között, amely mindkét táblázatban található.

A Belső Csatlakozás és a Természetes Csatlakozás közötti különbség:

  • I n inner join, meg kell adnia egy join feltétel, amely a belső összekapcsolás felhasználása, hogy csatlakozzon a két asztal. Míg a természetes összekapcsolásnál nem írsz össze csatlakozási feltételt. Csak írja le a két tábla nevét feltétel nélkül. Ezután a természetes összekapcsolás automatikusan teszteli az egyenlőséget az oszlopok értékei között mindkét táblában. A természetes csatlakozás automatikusan megállapítja a csatlakozás feltételét.
  • A TERMÉSZETES CSATLAKOZÁS alatt mindkét táblázat azonos oszlopú oszlopa egymáshoz illeszkedik. Például, ha két táblánk van két közös oszlopnévvel (a két oszlop ugyanazzal a névvel létezik a két táblában), akkor a természetes összekapcsolódás a két táblához úgy csatlakozik, hogy összehasonlítja mindkét oszlop értékét, és nem csak egyből. oszlop.

Példa

SELECTDiákok.StudentName,Departments.DepartmentNameA hallgatóktólTermészetes JOIN részlegek;

Magyarázat

  • Nem kell oszlopnevekkel írnunk egy csatlakozási feltételt (mint a Belső Csatlakozásban tettük). Nem is kellett egyszer megírnunk az oszlop nevét (mint a JOIN USING című cikkben).
  • A természetes csatlakozás mindkét oszlopot beolvassa a két táblázatból. Észlelni fogja, hogy a feltételnek a DepartmentId összehasonlításából kell állnia mind a két hallgató és tanszék táblázatból.

Kimenet

  • A Natural JOIN ugyanazt a kimenetet adja, mint amit a INNER JOIN és a JOIN USING példákkal kaptunk. Mert példánkban mindhárom lekérdezés egyenértékű. De egyes esetekben a kimenet eltér a belső összekapcsolástól, mint a természetes összekapcsolásnál. Például, ha több azonos nevű tábla van, akkor a természetes összekapcsolás minden oszlopot egymáshoz fog illeszteni. A belső illesztés azonban csak a csatlakozási feltétel oszlopainak felel meg (további részletek a következő szakaszról; a belső illesztés és a természetes összekapcsolás közötti különbség).

SQLite BAL KÜLSŐ CSATLAKOZÁS

Az SQL szabvány három típusú OUTER JOIN-t határoz meg: LEFT, RIGHT és FULL, de az SQLite csak a LEFT OUTER JOIN-t támogatja.

A LEFT OUTER JOIN részben a bal oldali táblázatból kiválasztott oszlopok összes értéke bekerül a lekérdezés eredményébe, így függetlenül attól, hogy az érték megfelel-e a csatlakozási feltételnek, vagy sem, az eredményben szerepel.

Tehát, ha a bal oldali táblázatban 'n' sor található, a lekérdezés eredménye 'n' sorral rendelkezik. A jobb oldali táblázatból érkező oszlopok értékei esetében azonban, ha olyan érték, amely nem felel meg a csatlakozási feltételnek, akkor "null" értéket tartalmaz.

Tehát számos sort kap, amely megegyezik a bal oldali csatlakozás sorainak számával. Annak érdekében, hogy mindkét táblázatból megkapja az egyező sorokat (például az INNER JOIN eredményeket), valamint a bal oldali táblázat nem megfelelő sorait.

Példa

A következő példában megpróbáljuk a "LEFT JOIN" elemet összekapcsolni a két "Diákok" és "Tanszékek" táblával:

SELECTDiákok.StudentName,Departments.DepartmentNameDiákoktól - ez a bal oldali táblázatLEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Magyarázat

  • A LEFT JOIN szintaxisa megegyezik a INNER JOIN funkcióval; beírod a LEFT JOIN szót a két tábla közé, majd az ON záradék után jön a join feltétel.
  • A from záradék után az első táblázat a bal oldali táblázat. Míg a bal oldali csatlakozás után megadott második táblázat a jobb oldali táblázat.
  • Az OUTER záradék opcionális; A BAL KÜLSŐ CSATLAKOZÁS megegyezik a BAL CSATLAKOZÁS.

Kimenet

  • Mint látható, a diákok táblázatának összes sora benne van, amelyek összesen 10 diák. Még akkor is, ha a negyedik és egyben utolsó hallgató, Jena és George departmentIds nem szerepel a Tanszékek táblában, akkor is szerepelnek.
  • Ezekben az esetekben mind a Jena, mind a GeorgeName részleg értéke "null" lesz, mert a departments táblában nincs olyan osztályNév, amely megegyezik a departmentId értékével.

Adjuk meg az előző lekérdezést a bal oldali csatlakozás segítségével egy mélyebb magyarázat segítségével Van-diagramokkal:

A BAL CSATLAKOZÁS az összes hallgató nevét megadja a hallgatók táblázatából, még akkor is, ha a hallgatónak van tanszék azonosítója, amely nem létezik a tanszékek táblázatában. Tehát a lekérdezés nem csak az INNER JOIN néven adja meg az egyező sorokat, hanem megadja azt a külön részt, amelynek a párosítatlan sorai vannak a bal oldali táblából, amely a diákok táblája.

Ne feledje, hogy minden olyan tanulónévnek, amelynek nincs egyező tanszéke, "null" érték lesz a tanszék neve, mert nincs hozzá illő érték, és ezek az értékek az un-matching sorokban található értékek.

SQLite CROSS JOIN

A CROSS JOIN megadja a derékszögű szorzatot a két összekapcsolt tábla kijelölt oszlopaihoz, úgy, hogy az első táblázat összes értékét a második táblázat összes értékéhez illeszti.

Tehát az első táblázat minden értékéhez 'n' egyezést kap a második táblából, ahol n a második táblázat sorainak száma.

A BELSŐ CSATLAKOZÁS és a LEFT KÜLSŐ CSATLAKOZÁSOKtól eltérően a CROSS JOIN esetén nem kell megadnia egy csatlakozási feltételt, mert az SQLite-nek nincs szüksége rá a CROSS JOIN számára.

Az SQLite logikai eredményeket eredményez, amelyek az első táblázat összes értékét a második táblázat összes értékével egyesítik.

Például, ha egy oszlopot választott az első táblázatból (colA) és egy másik oszlopot a második táblázatból (colB). A colA két értéket (1,2) és a colB két értéket (3,4) is tartalmaz.

Ekkor a CROSS JOIN eredménye négy sor lesz:

  • Két sor a colA első 1 értékének és a colB (3,4) két értékének (1, 3), (1,4) kombinálásával.
  • Hasonlóképpen, két sort úgy, hogy egyesítjük a colA második értékét, amely 2, a colB (3,4) két értékével, amelyek (2,3), (2,4).

Példa

A következő lekérdezésben megpróbáljuk a CROSS JOIN-ot a Hallgatók és a Tanszékek táblák között:

SELECTDiákok.StudentName,Departments.DepartmentNameA hallgatóktólCROSS JOIN részlegek;

Magyarázat

  • A select záradékban csak két oszlopot választottunk ki: "studentname" a hallgatók táblából, és a "departmentName" az osztályok táblából.
  • A keresztcsatlakozáshoz nem adtunk meg egyetlen csatlakozási feltételt sem, csak a két táblát kombináltuk a CROSS JOIN-nal a közepükön.

Kimenet:

Amint láthatja, az eredmény 40 sor; A diákok táblázatának 10 értéke egyezik a tanszék táblázat 4 osztályával. Mint a következő:

  • A tanszéktáblázat négy osztályának négy értéke egyezik az első Michel tanulóval.
  • A tanszéktáblázat Négy tanszékének négy értéke egyezik a második John tanulóval.
  • A tanszéktáblázat Négy tanszékének négy értéke egyezik a harmadik Jack tanulóval.

    … stb.

Összegzés

Az SQLite JOIN-ok használatával összekapcsolhat egy vagy több táblázatot vagy allekérdezést, hogy oszlopokat válasszon ki mindkét táblából vagy allekérdezésből.