Ami az összeillesztést illeti, a legtöbben főként két asztalos korláttal dolgozunk. Mindazonáltal gyakori, hogy három táblát kell összekapcsolni, hogy értelmesebb adatelrendezést és betekintést nyerjünk. Vegyük például azt, hogy hol szeretné lekérni a filmek listáját, a hozzájuk tartozó kölcsönzési készletet és a tényleges kölcsönzési adatokat. Ezen egységek mindegyike, például a filmek, a készlet és a kölcsönzés részletei külön táblázatokban találhatók.
Ebben az oktatóanyagban végigvezetjük a különféle összekapcsolásokon és technikákon, amelyek segítségével három tábla összekapcsolható SQL-ben.
Követelmények:
Demonstrációs célokra a MySQL 80-as verzióját és a Sakila mintaadatbázist használjuk. A folytatáshoz letöltheti és beállíthatja a Sakila adatbázist MySQL szerverén. Nyugodtan használhat bármilyen más adatkészletet, amelyet alkalmazhatónak ítél.
Csatlakozások típusai SQL-ben
Mielőtt rátérnénk az összekapcsolások alkalmazására, kezdjük azzal, hogy megvitatjuk az SQL-adatbázisokban elérhető különböző típusú összekapcsolásokat.
BELSŐ ÖSSZEKAPCSOLÁS
Az első típusú csatlakozás a BELSŐ JOIN. Ez a típusú összekapcsolás csak azokat a sorokat adja vissza, amelyek mindkét táblában egyező értéket tartalmaznak. Ez egy nagyon gyakori összekapcsolási típus, és a legegyszerűbb két tábla összekapcsolásakor.
A szintaxis a következő:
Oszlopok KIVÁLASZTÁSAtáblázatból1
BELSŐ JOIN tábla2 TOVÁBB tábla1.oszlop_neve = tábla2.oszlop_neve;
BAL CSATLAKOZÁS
LEFT JOIN esetén a bal oldali tábla összes sorát, a jobb oldali táblából pedig az illesztett sorokat adja vissza. Ha a megfelelő táblából nincsenek egyező értékek, az összekapcsolás hozzáadja a NULL értékeket a helyükre.
A szintaxis a következő:
Oszlopok KIVÁLASZTÁSAtáblázatból1
LEFT JOIN tábla2 TOVÁBB tábla1.oszlop_neve = tábla2.oszlop_neve;
JOBB CSATLAKOZÁS
Ahogy sejtheti, a RIGHT JOIN a LEFT JOIN ellentéte. Az ilyen típusú összekapcsolások a jobb oldali táblázat összes sorát, a bal oldali táblából pedig csak a megfelelő sorokat adják vissza. Ha a bal oldali táblában nincsenek egyező sorok, az összekapcsolás hozzáadja a NULL értékeket.
A következő a RIGHT JOIN szintaxisa:
Oszlopok KIVÁLASZTÁSAtáblázatból1
RIGHT JOIN tábla2 TOVÁBB tábla1.oszlop_neve = tábla2.oszlop_neve;
TELJES KÜLSŐ CSATLAKOZÁS
A következő típusú csatlakozás, amellyel az SQL-adatbázisokban találkozni fog, a TELJES KÜLSŐ JOIN. Ez a fajta összekapcsolás az összes sort visszaadja, ha egyezés van a jobb vagy a bal táblákban. Ha nincs egyező érték a kettő közül, akkor NULL értéket ad vissza a tábla oszlopaihoz az egyezés nélkül.
Az alábbiakban bemutatjuk a TELJES KÜLSŐ JOIN szintaxisát:
Oszlopok KIVÁLASZTÁSAtáblázatból1
TELJES KÜLSŐ JOIN tábla2 TOVÁBB tábla1.oszlop_neve = tábla2.oszlop_neve;
Érdemes szem előtt tartani, hogy nem minden adatbázismotor támogatja a TELJES KÜLSŐ CSATLAKOZÁST. Ennek eléréséhez más típusú JOINS-ekkel vagy allekérdezésekkel kell dolgoznia.
Példák:
Nézzünk meg néhány példát arra vonatkozóan, hogyan használhatjuk az ilyen típusú összekapcsolásokat három tábla összekapcsolására SQL-ben.
1. példa: A BELSŐ JOIN használata
Egy BELSŐ CSATLAKOZÁSSAL kezdjük. Tegyük fel, hogy szeretnénk lekérni a filmek listáját, a kölcsönzési készletet és a megfelelő kölcsönzési adatokat.
Több BELSŐ CSATLAKOZÁST is használhatunk a kapcsolódó táblákon, amint az a következő példában látható:
KIVÁLASZTÁSfilm cím,
inventory.inventory_id,
bérlés.bérleti_dátum
TÓL TŐL
film
BELSŐ JOIN leltár TOVÁBB
film.film_id = inventory.film_id
INNER JOIN bérlés TOVÁBB
inventory.inventory_id = rental.inventory_id;
A megadott példalekérdezésnél a film- és leltártáblázatok összekapcsolásával kezdjük a „film_id” oszlop alapján. Ezután vesszük a kapott halmazt, és az „inventory_id” oszlop alapján összekapcsoljuk a kölcsönzési táblázattal.
Ez biztosítja, hogy három táblát egy alapvető BELSŐ JOIN-nel kapcsoljunk össze. Az így kapott készlet a következő:
2. példa: Az INNER JOIN és a LEFT JOIN használata
Tegyük fel, hogy most szeretnénk a filmek listáját, a kölcsönzött készletek listáját (ha van ilyen) és a kapcsolódó kölcsönzési adatokat.
Arról is szeretnénk gondoskodni, hogy ha egy filmnek nincs is kölcsönözhető készlete, akkor is beleszámítsuk az eredménybe. Itt jön szóba a BELSŐ JOIN és a LEFT JOIN.
Tekintsük a következő példát:
KIVÁLASZTÁSfilm cím,
inventory.inventory_id,
bérlés.bérleti_dátum
TÓL TŐL
film
BELSŐ JOIN leltár TOVÁBB
film.film_id = inventory.film_id
LEFT JOIN kölcsönzés TOVÁBB
inventory.inventory_id = rental.inventory_id;
Ebben a példában egy BELSŐ JOIN-t használunk a film- és leltártáblázat összekapcsolására, így biztosítva, hogy megkapjuk a címeket a rendelkezésre álló leltárral. Ezután a LEFT JOIN segítségével csatlakozunk a kölcsönzési táblázathoz, hogy lekérjük a kölcsönzési adatokat, ha rendelkezésre állnak, és a NULL értéket minden olyan címhez, amelynek nincs kölcsönzési előzménye.
Az így kapott készlet a következő:
Következtetés
Ebben az oktatóanyagban megismerkedtünk az SQL-ben található JOINS különféle típusaival, működésükkel és három tábla kombinálásával.