SQLite Illesztés: Természetes bal külső, belső, keresztben a táblázatokkal
⚡ Okos összefoglaló
SQLite A JOIN záradékok két vagy több tábla sorait egyesítik INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN és CROSS JOIN használatával, lehetővé téve a kapcsolódó rekordok egyeztetését megosztott oszlopok alapján, és az adatok beolvasását egy normalizált adatbázisból.

SQLite különböző típusokat támogat SQL Csatlakozások, például BELSŐ CSATLAKOZÁS, LEFT OUTTER JOIN és CROSS JOIN. A JOIN minden típusa más-más helyzethez használható, amint azt ebben az oktatóanyagban látni fogjuk.
Bevezetés a SQLite JOIN záradék
Ha több táblát tartalmazó adatbázison dolgozik, gyakran ebből a több táblából kell adatokat szereznie.
A JOIN záradékkal két vagy több táblát vagy allekérdezést kapcsolhat össze azok összekapcsolásával. Meghatározhatja azt is, hogy melyik oszlophoz kell kapcsolnia a táblákat, és milyen feltételekkel.
Minden JOIN záradéknak a következő szintaxissal kell rendelkeznie:
Minden egyes csatlakozási záradék a következőket tartalmazza:
- Táblázat vagy segédlekérdezés, amely a bal oldali tábla; a tábla vagy az allekérdezés a csatlakozási záradék előtt (ettől balra).
- JOIN operátor – adja meg az összekapcsolás típusát (BELSŐ JOIN, LEFT OUTER JOIN vagy CROSS JOIN).
- JOIN-kényszer – miután megadta az összekapcsolandó táblákat vagy részlekérdezéseket, meg kell adnia egy összekapcsolási kényszert, amely egy olyan feltétel, amelynél az adott feltételnek megfelelő sorok az összekapcsolás típusától függően kerülnek kiválasztásra.
Ne feledje, hogy a következőkre vonatkozóan SQLite A JOIN táblák példáiban futtassa az sqlite3.exe fájlt, és nyissa meg a kapcsolatot a mintaadatbázissal folyamatban:
Step 1) Ebben a lépésben nyissa meg a Sajátgép ablakot, keresse meg a következő könyvtárat: „C:\sqlite”, majd nyissa meg az „sqlite3.exe” fájlt:
Step 2) 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 INNER JOIN
Az INNER JOIN csak azokat a sorokat adja vissza, amelyek megfelelnek az illesztési feltételnek, és kizárja az összes többi sort, amely nem felel meg az illesztési feltételnek.
Példa
A következő példában a „Hallgatók” és a „Tanszékek” táblákat a TanszékId paraméterrel fogjuk összekapcsolni, hogy megkapjuk az egyes hallgatók tanszékének nevét az alábbiak szerint:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments 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ét hivatkozott tábla közül azokat az oszlopokat, amelyeket ki szeretne választani.
- Az INNER JOIN záradék a „From” záradékkal hivatkozott első tábla után van írva.
- Ezután a csatlakozási feltételt BE értékkel adjuk meg.
- A hivatkozott táblákhoz álneveket lehet megadni.
- A BELSŐ szó nem kötelező, csak írja be a JOIN.
teljesítmény
Az INNER JOIN művelet mind a hallgatók, mind a tanszék tábláiból előállítja a „Students.DepartmentId = Departments.DepartmentId” feltételnek megfelelő rekordokat. A nem egyező sorokat a rendszer figyelmen kívül hagyja, és nem szerepel az eredményben.
Ezért a lekérdezés 10 diákból csak 8-at adott vissza informatika, matematika és fizika tanszékekkel. Míg a „Jena” és „George” diákok nem kerültek be a listába, mivel null tanszékazonosítóval rendelkeznek, ami nem egyezik meg a tanszékek táblázatának tanszékId oszlopával. Az alábbiak szerint:
SQLite CSATLAKOZÁS… HASZNÁLAT
Az INNER JOIN a „USING” záradékkal írható a redundancia elkerülése érdekében, így a „ON Students.DepartmentId = Departments.DepartmentId” helyett csak a „USING(Osztályazonosító)” szöveget írja be.
Használhatja a „JOIN .. HASZNÁLAT” parancsot, amikor az összekapcsolási feltételben összehasonlítandó oszlopok neve megegyezik. Ilyen esetekben nem szükséges megismételni őket a on feltétel használatával, csak adja meg az oszlopneveket és SQLite észlelni fogja.
A különbség az INNER JOIN és a JOIN között.. HASZNÁLAT:
A „JOIN … USING” paranccsal nem írsz join feltételt, csak a két joinolt tábla közös join oszlopát írod be. A table1 „INNER JOIN table2 ON table1.cola = table2.cola” helyett így írjuk: „table1 JOIN table2 USING(cola)”.
Példa
A következő példában a „Hallgatók” és a „Tanszékek” táblákat a TanszékId paraméterrel fogjuk összekapcsolni, hogy megkapjuk az egyes hallgatók tanszékének nevét az alábbiak szerint:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
Magyarázat
- Az előző példával ellentétben nem az „ON Students.DepartmentId = Departments.DepartmentId” kifejezést írtuk, hanem egyszerűen a „USING(DepartmentId)” kifejezést.
- SQLite automatikusan következtet az összekapcsolási feltételre, és összehasonlítja a Tanszékazonosítót mindkét táblából – Hallgatók és Tanszékek.
- Ezt a szintaxist akkor használhatja, ha az összehasonlítandó két oszlop azonos nevű.
teljesítmény
Ez pontosan ugyanazt az eredményt adja, mint az előző példa:
SQLite TERMÉSZETES CSATLAKOZÁS
A TERMÉSZETES JOIN hasonló a JOIN…USING-hez, a különbség az, hogy automatikusan ellenőrzi az egyenlőséget a mindkét táblázatban található minden oszlop értéke között.
A különbség a BELSŐ CSATLAKOZÁS és a TERMÉSZETES JOIN között:
- Az INNER JOIN-ban meg kell adnod egy illesztési feltételt, amelyet a belső illesztés használ a két tábla összekapcsolásához. Míg a természetes illesztésnél nem írsz illesztési feltételt. Csak a két tábla nevét írod ki feltétel nélkül. Ezután a természetes illesztés automatikusan ellenőrzi, hogy egyenlőek-e a két tábla minden oszlopának értékei. A természetes illesztés automatikusan kikövetkezteti az illesztési feltételt.
- A TERMÉSZETES CSATLAKOZÁS során mindkét tábla azonos nevű oszlopai egymáshoz illeszkednek. Például, ha van két táblánk két közös oszlopnévvel (a két oszlop azonos néven létezik a két táblában), akkor a természetes összekapcsolás a két táblát úgy fogja össze, hogy mindkét oszlop értékét összehasonlítja, és nem csak az egyikből. oszlop.
Példa
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
Magyarázat
- Nem kell oszlopneveket tartalmazó illesztési feltételt írnunk (mint ahogy az INNER JOIN-ban tettük). Még csak egyszer sem kellett megírnunk az oszlopnevet (mint ahogy a JOIN USING-ban tettük).
- A természetes összekapcsolás a két tábla mindkét oszlopát megvizsgálja. Azt észleli, hogy a feltételnek össze kell hasonlítania a Tanulók és a Tanszékek két tábla DepartmentId-jét.
teljesítmény
A NATURAL JOIN pontosan ugyanazt a kimenetet adja, mint amit az INNER JOIN és a JOIN USING példákból kaptunk, mivel a példánkban mindhárom lekérdezés egyenértékű. Bizonyos esetekben azonban a kimenet eltér a belső illesztéstől, mint egy természetes illesztésnél. Például, ha több azonos nevű tábla van, akkor a természetes illesztés az összes oszlopot össze fogja vetni egymással. A belső illesztés azonban csak az illesztési feltételben szereplő oszlopokkal fog egyezni.
SQLite BAL KÜLSŐ CSATLAKOZÁS
Az SQL szabvány háromféle KÜLSŐ ILLÉST definiál: BAL, JOBB és TELJES, de SQLite csak a természetes LEFT OUTER JOIN-t támogatja.
A LEFT OUTER JOIN lekérdezésben a bal oldali táblából kiválasztott oszlopok összes értéke szerepelni fog a lekérdezés eredményében, tehát függetlenül attól, hogy az érték megfelel-e a csatlakozási feltételnek vagy sem, az eredményben szerepelni fog.
Tehát, ha a bal oldali tábla 'n' sort tartalmaz, akkor a lekérdezés eredményei is 'n' sort fognak tartalmazni. A jobb oldali táblából származó oszlopok értékei esetében azonban, ha bármelyik érték nem felel meg az illesztési feltételnek, akkor az „null” értéket fog tartalmazni.
Tehát a bal oldali összeillesztésben lévő sorok számával megegyező számú sort fog kapni. Így mindkét táblábó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”-t a „Diákok” és a „Részlegek” táblázat összekapcsolására:
SELECT Students.StudentName, Departments.DepartmentName FROM Students -- this is the left table LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Magyarázat
- SQLite LEFT JOIN szintaxisa ugyanaz, mint az INNER JOIN; beírod a LEFT JOIN-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áni első táblázat a bal oldali tábla. Míg a természetes LEFT JOIN után megadott második táblázat a jobb oldali táblázat.
- Az OUTER záradék nem kötelező; A LEFT natural OUTER JOIN ugyanaz, mint a LEFT JOIN.
teljesítmény
Amint látható, a diákok tábla összes sora szerepel, ami összesen 10 diákot jelent. Még ha a negyedik és egyben utolsó diák, Jena és George, olyan részlegazonosítókkal is rendelkeznek, amelyek nem léteznek a részlegek táblában, ők is szerepelnek.
Ezekben az esetekben mind Jena, mind George departmentName értéke „null” lesz, mivel a departments táblában nincs olyan departmentName, amely megegyezik a departmentId értékükkel.
Adjunk részletesebb magyarázatot az előző, bal oldali illesztést használó lekérdezésre Venn-diagramok segítségével:
A LEFT JOIN lekérdezés a diákok táblából származó összes diák nevét megadja, még akkor is, ha a diáknak olyan tanszékazonosítója van, amely nem létezik a tanszékek táblában. Tehát a lekérdezés nem csak az egyező sorokat adja vissza BELSŐ CSATLAKOZÁSként, hanem a bal oldali táblázat, azaz a diákok tábla nem egyező sorait is megadja.
Ne feledje, hogy minden olyan hallgatónévnél, amelynek nincs egyező tanszéke, „null” lesz az osztálynév, mivel nincs egyező érték, és ezek az értékek a nem egyező sorokban található értékek.
SQLite CSATLAKOZÁS
A CROSS JOIN megadja a derékszögű szorzatot a két egyesített tábla kiválasztott oszlopaihoz, az első tábla összes értékét a második tábla összes értékével egyeztetve.
Tehát az első tábla minden értékéhez 'n' egyezést fog kapni a második táblából, ahol n a második táblázatsorok száma.
Az INNER JOIN és a LEFT OUTER JOIN függvényekkel ellentétben a CROSS JOIN esetében nem kell illesztési feltételt megadni, mert SQLite nincs rá szüksége a CROSS JOIN-hoz.
Az SQLite logikai eredményhalmazt eredményez az első táblázat összes értékének a második táblázat összes értékével való kombinálásával.
Például, ha az első táblából (colA) egy oszlopot, a második táblából pedig egy másik oszlopot (colB) választott ki, akkor az A col két értéket (1,2) tartalmaz, és a B col szintén két értéket (3,4) tartalmaz.
Ekkor a CROSS JOIN eredménye négy sor lesz:
- Két sor az colA első értékének, amely 1, és a colB két értékének (3,4) kombinálásával, amely (1,3), (1,4) lesz.
- Hasonlóképpen, két sor az colA második értékének, amely 2, és a colB (3,4) két értékének (2,3), (2,4) kombinálásával.
Példa
A következő lekérdezésben megpróbáljuk a CROSS JOIN-t a Hallgatói és Tanszéki táblák között:
SELECT Students.StudentName, Departments.DepartmentName FROM Students CROSS JOIN Departments;
Magyarázat
- A SQLite válasszon több táblából, mi csak két oszlopot választottunk ki: „studentname” a hallgatók táblázatából és a „departmentName” oszlopot a tanszéki táblázatból.
- A keresztezett illesztéshez nem adtunk meg semmilyen illesztési feltételt, csak a két táblát egyesítettük a közöttük lévő CROSS JOIN paranccsal.
teljesítmény
Mint látható, az eredmény 40 sor; A tanulói táblázat 10 értéke megegyezett a tanszéki táblázat 4 tanszékével. A következőképpen:
- A tanszéki táblázatból a négy tanszék négy értéke megegyezett az első diák Michelével.
- A tanszékek táblázatában szereplő négy tanszékhez tartozó négy érték egyezett a második diákkal, Johnnal.
- A tanszékek táblázatában szereplő négy tanszékhez tartozó négy érték egyezett a harmadik diákkal, Jackkel… és így tovább.











