SQLShack (Magyar)

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
Emil adatbázis-szakember, több mint 10 éves tapasztalattal rendelkezik az adatbázisokkal kapcsolatos mindenben . 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, 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
Drkusic Emil legújabb üzenetei (az összes megtekintése)
  • 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.

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