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