SQLShack (Magyar)

INNER JOIN vs LEFT JOIN, vagyis a kérdés. Ma röviden elmagyarázzuk, hogyan használják mind a két csatlakozási típust, és mi a különbség. Később újra átnézzük ezt a témát, amikor kibővítjük a modellünket, és sokkal összetettebb lekérdezéseket tudunk írni.

Változások az adatokban

Mielőtt összehasonlítanánk a Belső Csatlakozás és LEFT CSATLAKOZÁS, nézzük meg, mit tudunk jelenleg. Eddig ebben a sorozatban elmagyaráztuk az adatbázis alapjait – hogyan hozhatunk létre adatbázist és táblákat, hogyan tölthetjük fel a táblákat adatokkal, és egyszerű lekérdezések segítségével ellenőrizhetjük a bennük tároltakat. Az előző cikkben két táblához is csatlakoztunk. Most már készen állunk a következő lépésre.

Mielőtt azonban erre térnénk, tegyünk csak egy kisebb változtatást a következőre: adataink. 2 sort adunk hozzá az országtáblához a következő INSERT INTO parancsokkal:

Most ellenőrizzük mindkét táblázat tartalmát:

Könnyedén észreveheti, hogy 2 új sorunk van a táblázat országában, egy Spanyolországhoz és egy Oroszországhoz. Azonosítójuk 6 és 7. Figyeljük meg azt is, hogy a városi táblázatban nincs 6 vagy 7 értékű country_id. Ez egyszerűen azt jelenti, hogy az adatbázisunkban nincs Oroszországból vagy Spanyolországból származó város. Ezt a tényt később felhasználjuk.

BELSŐ CSATLAKOZÁS

Beszéljük meg ezt a két kérdést:

Az általuk visszaadott eredmény az alábbi képen látható:

Mindkét lekérdezés pontosan ugyanazt az eredményt adja. Ez nem véletlenül, hanem annak a ténynek az eredménye, hogy ez ugyanaz a lekérdezés, amelyet két különböző módon írtak. Mindkét módszer helyes, és bármelyiket használhatja.

Az első lekérdezésben felsoroltuk az összes táblázatot, amelyet a lekérdezés FROM részében (FROM ország, város) használtunk, majd mentünk a csatlakozással feltétel a lekérdezés WHERE részében (WHERE city.country_id = country.id). Abban az esetben, ha elfelejtettük volna megírni ezt a csatlakozási feltételt, mindkét tábla derékszögű szorzata lenne.

A második lekérdezésben csak egy táblázat van a lekérdezés FROM részében (FROM ország), és akkor megvan a második táblázat és a JOIN feltétel a lekérdezés JOIN részében (INNER JOIN város ON city.country_id = country.id).

Bár mindkét lekérdezés jól meg van írva, azt javaslom, hogy mindig az INNER JOIN parancsot használja táblázatok felsorolása és a lekérdezés WHERE részében való összekapcsolás helyett. Ennek néhány oka van:

  • Az olvashatóság sokkal jobb, mert a használt tábla és a kapcsolódó JOIN feltétel azonos vonal. Könnyen beláthatja, hogy kihagyta-e a JOIN feltételt vagy sem
  • Ha később más JOIN-okat szeretne használni (BAL vagy JOBB), akkor ezt nem tehette meg (könnyen), hacsak korábban nem használta a INNER JOIN hogy

Most kommentáljuk, hogy milyen lekérdezések érkeztek vissza:

  • Minden kapcsolódó ország- és várospár (külföldi kulcson keresztül)
  • Nincs 2 ország a listán (Spanyolország és Oroszország), mert a várostáblában nincsenek kapcsolódó városok

LEFT JOIN

Megismétlem ezt: “Nincs 2 ország a listán (Spanyolország és Oroszország), mert a várostáblában nincsenek kapcsolódó városok”. Ez döntő fontosságú lehet, ha összehasonlítjuk a BELSŐ CSATLAKOZÁS és a LEFT JOIN elemeket.

Bizonyos esetekben még ezeket a rekordokat is szeretnénk megjeleníteni az eredményeinkben. Például egyszerűen azt szeretné látni az eredményben, hogy ezeknek az országoknak nincsenek kapcsolódó rekordjai egy másik táblázatban. Ez része lehet valamilyen ellenőrzésnek, esetleg csak az esetek számlálásának stb. Nem számít, mi a motiváció a vágy mögött, technikailag képesnek kell lennünk erre. És mi vagyunk. Az adatbázisokban a LEFT JOIN pontosan ezt csinálja.

A LEFT JOIN eredménye megegyezik az INNER JOIN + eredményével + sorok lesznek a “bal” táblából, pár nélkül a “megfelelő” asztal. Ugyanazt az INNER JOIN lekérdezést fogjuk használni, és csak a INNER szót cseréljük le BALRA. Ez az eredmény:

Könnyen észreveheti, hogy még 2 sorral rendelkezünk, a INNER eredményéhez képest. CSATLAKOZÁS. Ezek Oroszország és Spanyolország sorai. Mivel mindkettőjüknek nincs kapcsolódó városa, a két sor összes városattribútumának NULL értéke van (nincs meghatározva). Ez a legnagyobb különbség az INNER JOIN és a LEFT JOIN összehasonlításakor.

RIGHT JOIN

Legalább hallani fog a RIGHT JOIN-ról. Ritkán használják, mert ugyanazt az eredményt adja, mint a LEFT JOIN. Másrészt a LEFT JOIN-t használó lekérdezéseket sokkal könnyebb elolvasni, mert egyszerűen egymás után soroljuk a táblázatokat.

Ez megegyezik a RIGHT JOIN-t használó előző lekérdezéssel:

Észreveheti, hogy a visszaadott értékek megegyeznek, csak ebben az esetben a várostábla értékei szerepelnek az első 5 oszlopban, és ország- kapcsolódó értékek jönnek utánuk.

BELSŐ CSATLAKOZÁS vs LEFT CSATLAKOZÁS

BELSŐ CSATLAKOZÁS vs LEFT CSATLAKOZÁS?Valójában egyáltalán nem ez a kérdés. Az INNER JOIN lehetőséget akkor használja, ha csak azokat a rekordokat szeretné visszaadni, amelyek mindkét oldalán párosítva vannak, és a LEFT JOIN elemet használja, amikor a „bal” táblázat összes rekordjára szüksége van, függetlenül attól, hogy a „jobb” táblázatban vannak-e párok. vagy nem. Ha mindkét táblázat összes rekordjára szüksége lesz, függetlenül attól, hogy van-e párja, akkor a CROSS JOIN-t kell használnia (vagy a LEFT JOINs és az UNION segítségével kell szimulálnia). További információ erről a következő cikkekben.

Tartalomjegyzék

Az SQL megismerése: CREATE DATABASE & TABLE műveletek létrehozása

Ismerje meg az SQL-t: INSERT INTO TABLE

Ismerje meg az SQL-t: Elsődleges kulcs

Ismerje meg az SQL-t: Idegen kulcs

Ismerje meg az SQL: SELECT utasítást

Tanuljon SQL: INNER JOIN vs LEFT JOIN

Ismerje meg az SQL: SQL parancsfájlokat

Ismerje meg az SQL-t: A relációk típusai

Ismerje meg az SQL-t: Csatlakozzon több táblához

Ismerje meg az SQL-t: összesített függvények

Ismerje meg SQL: Összetett SELECT lekérdezés írása

Az SQL megtanulása: Az INFORMATION_SCHEMA adatbázis

Az SQL: SQL adattípusok megismerése

Ismerje meg az SQL-t: Állítsa be az elméletet

Ismerje meg az SQL-t: Felhasználó által definiált függvények

Ismerje meg az SQL-t: Felhasználó által meghatározott tárolt eljárások

Tanuljon SQL-t: SQL nézetek

Tanuljon SQL-t: SQL-triggerek

Tanulja meg az SQL-t: SQL-lekérdezések gyakorlása

Ismerje meg az SQL-t: Példák az SQL lekérdezésre

Az SQL megtanulása: Hozzon létre jelentést manuálisan SQL lekérdezések használata

Tanuljon SQL: SQL Server dátum és idő függvények

Tanuljon SQL: Hozzon létre SQL Server jelentéseket dátum és idő függvényekkel

Ismerje meg az SQL-t: SQL Server pivot-táblák

Ismerje meg az SQL-t: Az SQL Server exportálása Excelbe

Ismerje meg az SQL-t: Bevezetés az SQL Server-hurkokba

Ismerje meg az SQL-t: SQL Server-kurzorok

Ismerje meg az SQL-t: SQL bevált gyakorlatok az adatok törléséhez és frissítéséhez

Ismerje meg az SQL-t: Elnevezési konvenciók

Ismerje meg az SQL-t: SQL-hez kapcsolódó munkák

Ismerje meg az SQL-t: Non-Equi csatlakozik az SQL Server-hez

Ismerje meg az SQL-t: SQL Injekció

  • Szerző
  • Legutóbbi bejegyzések
Emil adatbázis-szakember, több mint 10 éves tapasztalattal rendelkezik az adatbázisokkal kapcsolatban. Az évek során az informatikai és pénzügyi iparban dolgozott, és most szabadúszóként dolgozik.
Korábbi és jelenlegi feladatai az adatbázis-tervezéstől és a kódolástól az oktatásig, a tanácsadásig és az adatbázisokról szóló írásig változnak. Ne feledkezzünk meg a BI-ről sem, algoritmusok, sakk, filatélia, 2 kutya, 2 macska, 1 feleség, 1 baba …
Megtalálhatja őt a LinkedIn oldalon
Druskic Emil összes bejegyzésének megtekintése

Drkusic Emil legújabb üzenetei (az összes megtekintése)
  • Tanuljon SQL: SQL Injection – 2020. november 2.
  • Tanuljon SQL-t: Nem Equi-tagok csatlakoznak az SQL Server-hez – 2020. szeptember 29.
  • Tanuljon SQL-t: SQL-hez kapcsolódó munkák – 2020. szeptember 1.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük