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.

  • 🔗 Csatlakozási záradék: A JOIN záradék két vagy több táblát vagy allekérdezést kapcsol össze egy megosztott oszlopban, amelyet ON vagy USING feltétellel definiálnak.
  • 🎯 BELSŐ ÖSSZEKAPCSOLÁS: Az INNER JOIN függvény csak azokat a sorokat adja vissza, amelyekben az illesztési feltétel mindkét táblában megegyezik, a nem egyező sorokat pedig elveti.
  • 🧩 HASZNÁLAT ÉS TERMÉSZETES: A JOIN USING egy megosztott oszlopot nevez meg, míg a NATURAL JOIN automatikusan egyeztet minden azonos nevű oszlopot.
  • ↩️ BAL KÜLSŐ CSATLAKOZÁS: A LEFT OUTER JOIN függvény minden bal oldali táblázat sorát megőrzi, a nem egyező jobb oldali táblázat oszlopait pedig NULL értékekkel tölti fel.
  • ✖️ KERESZT CSATLAKOZÁS: A CROSS JOIN függvény a Descartes-szorzatot adja vissza, minden bal oldali táblázat sorát minden jobb oldali táblázat sorával párosítva.
  • 🤖 AI segítség: AI szöveg-SQL eszközök és a GitHub Copilot generál SQLite JOIN lekérdezések egyszerű angol promptokból.

SQLite Csatlakozik

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:

SQLite JOIN záradék szintaxisa

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:

Nyissa meg az sqlite3.exe fájlt az sqlite könyvtárból

Step 2) Nyissa meg a „TutorialsSampleDB.db” adatbázist a következő paranccsal:

Nyissa meg a TutorialsSampleDB adatbázist

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

SQLite INNER JOIN

SQLite BELSŐ CSATLAKOZÁS Venn-diagram

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.

SQLite INNER JOIN példa eredménye

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 INNER JOIN egyező sorok

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 CSATLAKOZZON példa eredmény használatával

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 NATURAL JOIN példa eredménye

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.

SQLite BAL KÜLSŐ CSATLAKOZÁS példa eredménye

Adjunk részletesebb magyarázatot az előző, bal oldali illesztést használó lekérdezésre Venn-diagramok segítségével:

SQLite BAL KÜLSŐ CSATLAKOZÁS Venn-diagram

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.

SQLite CROSS JOIN példa eredménye

GYIK

SQLite Hozzáadtuk a RIGHT JOIN és a FULL OUTER JOIN támogatást a 2022-ben kiadott 3.39.0 verzióban. Régebbi buildeken a RIGHT JOIN-t swap-pel emuláljuk.ping a táblákat egy BALRA HOZZÁFŰZÉSBEN, és egy TELJES KÜLSŐ HOZZÁFŰZÉSBEN két BALRA HOZZÁFŰZÉS UNIONnal való kombinálásával.

Az önillesztés egy táblát önmagához csatol táblaaliasok segítségével, így az egyik másolat a bal oldali, a másik a jobb oldali táblaként szolgál. Ez hasznos ugyanazon tábla sorainak összehasonlításához, például az alkalmazottak és a vezetőik párosításához.

Igen. Több JOIN záradékot láncolsz össze egyetlen SELECT utasításban, mindegyiket saját ON vagy USING feltétellel, például FROM A JOIN B ON … JOIN C ON …. SQLite a balról jobbra haladó táblázatokat egyetlen egyesített eredményhalmazzá egyesíti.

A JOIN önmagában történő írása ugyanaz, mint az INNER JOIN írása a következőben: SQLiteMindkettő csak azokat a sorokat tartja meg, amelyek kielégítik az ON vagy USING feltételt, így a nem egyező sorok elvészek. Az INNER kulcsszó opcionális, így a JOIN és az INNER JOIN felcserélhetőek.

Az illesztési feltételben használt oszlopokon index létrehozása lehetővé teszi SQLite a sorok egyeztetése teljes táblák beolvasása nélkül, ami felgyorsítja a nagy adathalmazok illesztéseit. Az idegen kulcs oszlopok indexelése és az ANALYZE futtatása a statisztikák frissítéséhez tovább javítja az illesztési lekérdezések teljesítményét.

Egy INNER JOIN csak azokat a sorokat adja vissza, amelyek mindkét táblában egyeznek. A LEFT OUTER JOIN a bal oldali tábla összes sorát, valamint a jobb oldali tábla egyező sorait adja vissza, a nem egyező jobb oldali oszlopokat NULL értékkel töltve ki. Tehát a LEFT JOIN soha nem dobja el a bal oldali tábla sorait.

Igen. A mesterséges intelligenciával működő szöveg-SQL asszisztensek egyszerű angol kéréseket alakítanak át SQLite INNER, LEFT, NATURAL és CROSS JOIN utasítások. A táblanevek, oszlopnevek és kapcsolatok megadása javítja a pontosságot, és minden létrehozott illesztést át kell tekinteni és tesztelni kell, mielőtt valós adatokon futtatnánk.

GitHub másodpilóta javasolja SQLite JOIN lekérdezések beágyazása a szerkesztőkbe, például VS Code, kiegészítve az INNER JOIN, LEFT JOIN és az ON vagy USING záradékokat. Beolvassa a közeli sémákat és megjegyzéseket, így a javaslatai újra felhasználják a valódi tábla- és oszlopneveket.

Foglald össze ezt a bejegyzést a következőképpen: