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
- Nyissa meg a Sajátgép elemet, és keresse meg a következő könyvtárat: " C: \ sqlite " és
- 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.