SQLite Csatlakozás: Természetes bal külső, belső, kereszt asztalokkal Példa

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
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 a

  1. Nyissa meg a Sajátgépet, és keresse meg a következő könyvtárat:C:\sqlite"És
  2. Ezután nyissa megsqlite3.exe"

SQLite JOIN záradék

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

SQLite JOIN záradék

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 összekapcsolási feltételnek, és kiküszöböli az összes többi sort, amely nem felel meg az összekapcsolási feltételnek.

SQLite INNER JOIN
SQLite INNER JOIN

Példa

A következő példában összekapcsoljuk a két táblát "Diákok"És"Osztályok” részlegazonosítóval, hogy megkapja az egyes hallgatók osztálynevé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

SQLite BELSŐ CSATLAKOZÁS Példa

  • Az INNER JOIN mindkettőből – a hallgatókból és a tanszéki táblázatokból – állítja elő azokat a rekordokat, amelyek megfelelnek a „feltételnek”Students.DepartmentId = Departments.DepartmentId “. Az egyező sorok figyelmen kívül maradnak, és nem szerepelnek az eredményben.
  • Ezért ebből a lekérdezésből 8 diákból csak 10 diák érkezett vissza informatika, matematika és fizika tanszékekkel. Míg a „Jena” és „George” tanulók nem kerültek bele, mert nulla tanszéki azonosítójuk van, ami nem egyezik a tanszéki tábla tanszékazonosító oszlopával. A következőképpen:

    SQLite BELSŐ CSATLAKOZÁS Példa

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 BELSŐ CSATLAKOZÁS és a JOIN közötti különbség .. HASZNÁLATÁVAL:

A „JOIN … USING”-el nem írunk be csatlakozási feltételt, csak azt az összekapcsolási oszlopot írjuk, amely közös a két összekapcsolt tábla között, ahelyett, hogy a table1 „INNER JOIN table2 ON table1.cola = table2.cola” szöveget írnánk. ez olyan, mint a „tábla1 JOIN table2 USING(cola)”.

Példa

A következő példában összekapcsoljuk a két táblát "Diákok"És"Osztályok” részlegazonosítóval, hogy megkapja az egyes hallgatók osztálynevé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 írtunk „ON Students.DepartmentId = Departments.DepartmentId“. Csak azt írtuk, hogy "HASZNÁLAT (részlegazonosító)".
  • 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 CSATLAKOZÁS 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 adni egy összekapcsolási feltételt, amelyet a belső összekapcsolás használ a két tábla összekapcsolásához. Míg a természetes összekapcsolásban nem írunk be összekapcsolási feltételt. Csak írja be a két tábla nevét feltétel nélkül. Ezután a természetes összekapcsolás automatikusan ellenőrzi, hogy a két tábla minden oszlopában található értékek egyenlőek-e. A természetes összekapcsolás automatikusan következtet az összekapcsolási feltételre.
  • 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 összeillesztési feltételt írnunk oszlopnevekkel (mint ahogyan az INNER JOIN-nál tettük). Még az oszlopnevet sem kellett egyszer leírnunk (mint ahogyan a JOIN USING-nél 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

SQLite TERMÉSZETES CSATLAKOZÁS Példa

  • A Natural JOIN pontosan ugyanazt a kimenetet adja, mint amit az INNER JOIN és a JOIN USING példákból kaptunk. Mert példánkban mindhárom lekérdezés egyenértékű. De bizonyos esetekben a kimenet eltér a belső csatlakozástól, mint a természetes illesztéstől. Például, ha több azonos nevű tábla van, akkor a természetes összekapcsolás az összes oszlopot egymáshoz illeszti. A belső illesztés azonban csak az összeillesztési feltételben lévő oszlopokkal fog megegyezni (további részletek a következő részben; a belső illesztés és a természetes illesztés közötti különbség).

SQLite BAL KÜLSŐ CSATLAKOZÁS

Az SQL szabvány háromféle KÜLSŐ JOIN-t határoz meg: LEFT, RIGHT és FULL, de SQLite csak a természetes LEFT OUTER JOIN-t támogatja.

A LEFT OUTER JOIN-ban a bal oldali táblázatból kiválasztott oszlopok összes értéke bekerül az eredménybe. kérdés, tehát függetlenül attól, hogy az érték megfelel-e az összekapcsolási feltételnek vagy sem, az szerepelni fog az eredményben.

Tehát ha a bal oldali táblázatban 'n' sor van, akkor a lekérdezés eredménye 'n' sorral rendelkezik. A jobb oldali táblából származó oszlopok értékei esetében azonban, ha valamelyik érték nem egyezik az összekapcsolási feltétellel, 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

SQLite LEFT OUTER JOIN Példa

  • Amint láthatja, a tanulói táblázat összes sora szerepel, amelyek összesen 10 tanulót jelentenek. Még ha a negyedik és az utolsó tanuló, Jéna és George osztályazonosítója nem is létezik a Tanszékek táblában, akkor is szerepelnek.
  • És ezekben az esetekben a DepartmentName értéke Jena és George esetében is „null” lesz, mivel a részlegek táblájában nincs olyan DepartmentName, amely megfelelne a DepartmentId értéküknek.

Adjuk meg az előző lekérdezést a bal oldali csatlakozással, és egy mélyebb magyarázatot a Van diagramok segítségével:

SQLite BAL KÜLSŐ CSATLAKOZÁS

SQLite BAL KÜLSŐ CSATLAKOZÁS

A LEFT JOIN az összes diák nevét megadja a tanulói táblázatból, még akkor is, ha a hallgatónak olyan osztályazonosítója van, amely nem létezik a tanszéktáblázatban. Tehát a lekérdezés nem csak az egyező sorokat adja meg BELSŐ JOIN-ként, hanem azt a plusz részt, amelyik a bal oldali táblából, azaz a tanulók táblájából a nem megfelelő sorokat tartalmazza.

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 OUTTER JOIN-től eltérően a CROSS JOIN esetén nem kell csatlakozási feltételt megadni, mert SQLite nincs rá szüksége a CROSS JOIN-hoz.

A SQLite az első tábla összes értékének és a második tábla összes értékének kombinálásával logikai eredményeket eredményez.

Például, ha kiválasztott egy oszlopot az első táblából (colA), és egy másik oszlopot a második táblából (colB). A colA két értéket (1,2), a colB pedig 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 keresztillesztéshez nem adtunk meg semmilyen összekapcsolási feltételt, csak a két táblát a közepén található CROSS JOIN-nel kombinálva.

teljesítmény

SQLite KERESZTES JOIN Példa

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éki táblázatból a Négy tanszék négy értéke megegyezik a második János tanulóval.
  • A négy tanszék négy értéke a tanszéki táblázatból megegyezett a harmadik diákkal, Jackkel… és így tovább.

Összegzésként

<p></p> SQLite JOIN lekérdezés, összekapcsolhat egy vagy több táblát vagy részlekérdezést, hogy mindkét táblából vagy allekérdezésből válasszon ki oszlopokat.