Ha valami értelmeset szeretne kihozni az adatokból , szinte mindig több táblához kell csatlakoznia. Ebben a cikkben bemutatjuk, hogyan lehet ezt megtenni különböző típusú összekapcsolásokkal. Ennek elérése érdekében kombináljuk a BELSŐ CSATLAKOZÁSOKAT és a BAL CSATLAKOZÁSOKAT. Tehát kezdjük.
A modell
Az alábbi képen meglévő modell látható. 6 táblából áll, és már többé-kevésbé leírtuk az előző cikkekben.
Mégis, leírás nélkül is, ha az adatbázist jó modellezéssel és bemutatással hajtjuk végre (a nevek okos megválasztása, a névadási konvenció használata, ugyanazok a szabályok betartása az egész modellben, a sémában szereplő vonalak / relációk nem fedik egymást jobban, mint szükséges) hogy megtudja, hol találhatja meg a szükséges adatokat. Ez döntő fontosságú, mert mielőtt több táblához csatlakozna, először meg kell határoznia ezeket a táblákat.
A későbbiekben a későbbiekben a névadási szokásokról és az SQL-lekérdezések írására vonatkozó tanácsokról fogunk beszélni. sorozat. Eddig éljünk azzal a ténnyel, hogy ez a modell nagyon egyszerű, és meglehetősen egyszerűen meg tudjuk csinálni.
Mit tudunk eddig?
Ebben a sorozatban lefedett:
- Az SQL SELECT utasítással kapcsolatos alapismeretek és
- Összehasonlítva a BELSŐ CSATLAKOZÁS és a LEFT CSATLAKOZÁS
A tudást felhasználjuk Mindkét cikkből ezeket kombinálva összetettebb SELECT utasításokat írhat, amelyek több táblához fognak csatlakozni.
Csatlakozzon több táblához az INNER JOIN használatával
Az első példa, amelyet elemezni fogunk, az a több tábla adatai, csak INNER JOIN használatával. Mindegyik példán áttekintjük a megoldandó probléma meghatározását és a feladatot végző lekérdezést. Kezdjük tehát az első problémával.
# 1 Fel kell sorolnunk az összes hívást kezdési és befejezési idejükkel. Minden hívásnál meg akarjuk jeleníteni, mi volt az eredmény, valamint a hívást kezdeményező alkalmazott kereszt- és vezetéknevét. A hívásaink kezdési idő szerint növekszik.
Mielőtt megírnánk a lekérdezést, meghatározzuk azokat a táblázatokat, amelyeket használnunk kell. Ehhez meg kell határoznunk, hogy mely táblázatok tartalmazzák a szükséges adatokat, és azokat is tartalmazzuk. Ezenkívül az összes táblázatot bele kell foglalnunk a táblák közé – olyan táblákat, amelyek nem tartalmaznak szükséges adatokat, de viszonylatként szolgálnak a táblázatok között (ez itt nem így van).
A feladatot végző lekérdezés az alábbiakban található:
A lekérdezés eredménye az alábbiakban található:
Néhány dologra szeretnék itt rámutatni:
- Azok a táblák, amelyekhez csatlakoztunk, itt vannak, mert az adatok Szükségünk található ebben a 3 táblában.
- Minden alkalommal, amikor bármely attribútumot megemlítek bármelyik táblából, a table_name.attribute_name formátumot használom (pl. alkalmazott. keresztnév). Bár erre nincs szükség, ez jó gyakorlat, mert néha ugyanabban a lekérdezésben 2 vagy több táblázat használhatja ugyanazokat az attribútumneveket, és ez hibához vezetne
- A INNER JOIN 2-szer használtuk a rendet 3 asztalhoz csatlakozni. Ez azt eredményezi, hogy csak azok a sorok kerülnek visszaadásra, amelyeknek párjai vannak egy másik táblában.
- Ha csak INNER JOIN-okat használ több táblázat összekapcsolásához, akkor ezeknek a tábláknak a sorrendje az összekapcsolásokban nem fontos. Az egyetlen fontos dolog, hogy az “ON” után csatlakozzon a megfelelő csatlakozási feltételekhez (csatlakozás idegen kulcsokkal)
Mivel minden híváshoz kapcsolódó munkatárs és hívás kimenetel tartozik, ugyanazt az eredményt kapnánk, ha a Belső Csatlakozás helyett a BAL JOIN szót használtuk.
Több tábla összekapcsolása a BAL JOIN használatával
A BAL JOIN-t használó lekérdezések írása nem sokban különbözik a lekérdezések írásától. INNER JOINs. Az eredmény természetesen más lenne (legalábbis azokban az esetekben, amikor egyes rekordoknak nincs párja más táblákban).
Ezt a problémát szeretnénk megoldani.
# 2 Sorolja fel az összes országot és ügyfelet, amelyek ezekhez az országokhoz kapcsolódnak. Minden országban jelenítse meg a nevét angolul, a városi ügyfél nevét és az adott ügyfél nevét. Tegyen vissza olyan országokat is, amelyek nem tartalmaznak kapcsolódó városokat és ügyfelek.
A szükséges adatokat tartalmazó táblázatok az alábbi képen találhatók:
Először gyorsan ellenőrizze, mi a folytatás Ennek a 3 táblának az ents.
Két fontos dolgot észlelhetünk:
- Bár mindegyik városnak van egy kapcsolódó országa, nem minden országban vannak kapcsolódó városok (Spanyolországban & Oroszországban nincsenek)
- Ugyanez vonatkozik az ügyfelekre.Minden ügyfélnek megadta a city_id értéket, de csak 3 várost használnak (Berlin, Zágráb & New York)
Először írjuk le a lekérdezés a Belső Csatlakozás használatával:
A lekérdezés eredménye az alábbi képen látható:
7 megye és 6 város az adatbázisunkban, de a lekérdezésünk csak 4 sort ad vissza. Ez annak a ténynek az eredménye, hogy csak 4 ügyfél van az adatbázisunkban. Mind a 4 a városához kapcsolódik, a város pedig az országhoz. Tehát a INNER JOIN megszüntette ezeket az országokat és városokat vásárlók nélkül. De hogyan lehet ezeket is belefoglalni az eredménybe?
Ehhez a LEFT JOIN elemet fogjuk használni. Egyszerűen kicseréljük az “INNER” szót “LEFT” -re, így a lekérdezésünk a következő:
Az eredmény az alábbi képen látható:
Könnyedén észreveheti, hogy most már minden országunk megvan, még azok is, amelyeknek nincs kapcsolódó városa (Oroszország & Spanyolország), valamint az összes ország. városok, még az ügyfelekkel nem rendelkezők is (Varsó, Belgrád & Los Angeles). A fennmaradó 4 sor megegyezik az INNER JOIN használatával végzett lekérdezéssel.
LEFT JOIN – A táblázatok sorrendje számít
Bár a JOIN sorrendje a INNER JOIN-ban nem fontos, ugyanaz nem áll a BAL CSATLAKOZÁS mellett. Amikor a LEFT JOIN-t használjuk több asztal összekapcsolásához, fontos megjegyezni, hogy ez a csatlakozás a JOIN BAL oldalán lévő táblázat összes sorát tartalmazza. Rendezzük át az előző lekérdezést:
Eleinte könnyen azt mondhatná, hogy ez a lekérdezés és az előző megegyezik (ez a INNER JOIN használatakor igaz). Ugyanazokat a táblázatokat, LEFT JOIN-okat és ugyanazokat a csatlakozási feltételeket használtuk. Először vessünk egy pillantást a kimenetre:
Szóval, mi történt itt? Miért van 4 sorunk (ugyanaz a 4, mint a INNER JOIN használatakor)?
A válasz egyszerű és a LEFT JOIN működéséhez kapcsolódik. Elfogadja az első táblát (ügyfél), és minden sorát (4-ből) összekapcsolja a következő táblával (város). Ennek eredménye 4 sor, mert az ügyfél csak 1 városhoz tartozhat. Ezután összekapcsoljuk ezt a 4 sort a következő táblához (ország), és megint 4 sorunk van, mert a város csak 1 országhoz tartozhat.
Az ok, amiért nem csatlakoznánk ehhez a 3 táblához módját a 2. példa szövege adja. A lekérdezés olyan módon van megírva, hogy négy sort ad vissza, így válaszolhatnánk az alábbiakra: Az összes ügyfél, valamint a városok és az országok nevei, amelyekben találhatók. Még a kapcsolódó városok és országok nélküli ügyfeleket is visszaadhatja.
- Megjegyzés: A LEFT JOIN használatakor az utasítás utasításainak sorrendje fontos, és a lekérdezés más eredményt ad vissza, ha megváltoztatja ezt a sorrendet. A sorrend valójában attól függ, hogy mit szeretne visszaküldeni.
Csatlakozzon több táblához mindkettővel – INNER JOIN & LEFT JOIN
Ez is lehetséges. Menjünk ismét egy példával.
# 3 Adja vissza az összes olyan ország és város listáját, amelynek párja van (kizárva azokat az országokat, amelyekre egyetlen város sem hivatkozik). Ilyen párok esetén minden vásárló visszatér. Olyan párokat adjon vissza, amelyeknek nincs egyetlen ügyfele.
A feladatot ellátó lekérdezés a következő:
A lekérdezés eredménye az alábbi képen látható:
Könnyedén észreveheti, hogy nincsenek országaink, amelyekhez nincs kapcsolódó város (ezek Spanyolország voltak & Oroszország). A Belső Csatlakozás kiküszöbölte ezeket a sorokat. Ennek ellenére vannak ügyfeleink nélküli idézetek (Belgrád, Los Angeles & Varsó). Ez annak a ténynek az eredménye, hogy a LEFT JOIN szót használtuk a város és az ügyfél táblák között.
Következtetés
Ha több táblához kell csatlakoznia, akkor INNER & LEFT JOIN az Ön rendelkezésére (a JOBB CSATLAKOZÁST ritkán használják, és könnyen helyettesíthető a BAL JOIN-val). Az, hogy melyik csatlakozást fogja használni, közvetlenül függ a megoldandó feladattól, és végig érzi az érzését. A következő cikkekben megvitatjuk, hogyan gondolkodjon és szervezze magát, amikor összetettebb lekérdezéseket kell írnia.
Tartalomjegyzék
Ismerje meg az SQL-t: CREATE DATABASE & TABLE CREATE műveletek létrehozása
Tanuljon SQL-t: INSERT INTO TABLE
Tanuljon SQL-t: Elsődleges kulcs
Tanuljon SQL-t: Idegen kulcs
Tanuljon SQL-t: SELECT utasítás
Ismerje meg az SQL-t: INNER JOIN vs LEFT JOIN
Ismerje meg az SQL-t: SQL-szkriptek
Ismerje meg az SQL-t: Kapcsolattípusok
Ismerje meg az SQL-t: Csatlakozzon több táblához
Ismerje meg az SQL-t: összesített függvények
Ismerje meg az SQL-t: Hogyan kell írni egy komplexet SELECT Lekérdezés
Ismerje meg az SQL-t: Az INFORMATION_SCHEMA adatbázis
Ismerje meg az SQL-t: SQL adattípusok
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
Ismerje meg az SQL-t: SQL-nézetek
Ismerje meg az SQL-t: SQL-triggerek
Ismerje meg az SQL-t: Gyakoroljon SQL-lekérdezéseket
Tanuljon SQL-t: SQL Lekérdezési példák
Ismerje meg az SQL-t: Hozzon létre jelentést manuálisan SQL-lekérdezések segítségével
Ismerje meg az SQL-t: SQL Server dátum és idő függvények
Tanuljon SQL: Hozzon létre SQL Server jelentéseket dátum és idő függvények használatával
Ismerje meg az SQL: SQL Server kimutató táblákat
Ismerje meg az SQL-t: SQL Server-exportálás 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, 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 a LinkedIn oldalon
Druskic Emil összes hozzászólása
- Tanuljon SQL: SQL Injection – 2020. november 2.
- Tanuljon SQL: Non-Equi csatlakozik az SQL Serverhez – 2020. szeptember 29.
- Tanuljon SQL-t: SQL-hez kapcsolódó munkák – 2020. szeptember 1.