Üdvözöllek! Ha most ismerkedsz az adatbázisokkal, valószínűleg hallottál már a táblák összekapcsolásáról (JOIN). Ez egy kulcsfontosságú technika, amellyel az adatok komplex rendszerekben való tárolása és lekérdezése sokkal hatékonyabbá válik. Ebben a cikkben lépésről lépésre végigvezetünk a táblák összekapcsolásának alapjain, érthetően és példákkal illusztrálva.
Miért van szükség táblák összekapcsolására?
Gondolj bele, ha egy webshop adatbázisában mindent egyetlen hatalmas táblában tárolnánk: vásárlók, termékek, rendelések, címek… Az áttekinthetetlen lenne, rengeteg redundanciával járna (ugyanaz az adat többször is szerepelne), és a frissítések rémálommá válnának. Éppen ezért az adatbázisokat normalizáljuk, azaz kisebb, jól definiált táblákra bontjuk.
Például:
Vevők
: Tartalmazza a vevők adatait (ID, név, e-mail, cím, stb.).Termékek
: Tartalmazza a termékek adatait (ID, név, ár, leírás, stb.).Rendelések
: Tartalmazza a rendelések adatait (ID, vevő ID, dátum, szállítási cím, stb.).Rendelés_tételek
: Tartalmazza, hogy melyik rendelésben melyik termékből mennyi szerepel (rendelés ID, termék ID, mennyiség).
Ezek a táblák önmagukban hasznos információkat tartalmaznak, de a valódi erejük az összekapcsolásukban rejlik. Így tudjuk például lekérdezni, hogy egy adott vevő milyen termékeket rendelt, vagy hogy melyik termékből adták el a legtöbbet.
A JOIN típusai
A JOIN különböző típusai léteznek, amelyek különböző módokon kapcsolják össze a táblákat. Nézzük a legfontosabbakat:
INNER JOIN
Az INNER JOIN a leggyakrabban használt típus. Csak azokat a sorokat adja vissza, ahol a két táblában a megadott oszlop(ok) értéke megegyezik.
Példa:
SELECT Vevők.Név, Rendelések.Dátum
FROM Vevők
INNER JOIN Rendelések ON Vevők.ID = Rendelések.Vevő_ID;
Ez a lekérdezés visszaadja minden vevő nevét és a rendeléseik dátumát, de csak azokét, akiknek ténylegesen van rendelésük.
LEFT (OUTER) JOIN
A LEFT JOIN a bal oldali tábla (a FROM után megadott tábla) minden sorát visszaadja, és a jobb oldali táblából csak azokat, amelyek megfelelnek a JOIN feltételnek. Ha nincs megfelelő sor a jobb oldali táblában, a jobb oldali tábla oszlopai NULL értékeket kapnak.
Példa:
SELECT Vevők.Név, Rendelések.Dátum
FROM Vevők
LEFT JOIN Rendelések ON Vevők.ID = Rendelések.Vevő_ID;
Ez a lekérdezés visszaadja minden vevő nevét és a rendeléseik dátumát. Azoknak a vevőknek is megjelenik a neve, akiknek nincs rendelésük, de a dátum oszlop NULL lesz.
RIGHT (OUTER) JOIN
A RIGHT JOIN a LEFT JOIN tükörképe. A jobb oldali tábla minden sorát visszaadja, és a bal oldali táblából csak azokat, amelyek megfelelnek a JOIN feltételnek. Ha nincs megfelelő sor a bal oldali táblában, a bal oldali tábla oszlopai NULL értékeket kapnak.
Példa:
SELECT Vevők.Név, Rendelések.Dátum
FROM Vevők
RIGHT JOIN Rendelések ON Vevők.ID = Rendelések.Vevő_ID;
Ez a lekérdezés visszaadja minden rendelés dátumát és a hozzá tartozó vevő nevét. Ha egy rendeléshez nem tartozik vevő (ami valószínűtlen, de elméletileg lehetséges), a név oszlop NULL lesz.
FULL (OUTER) JOIN
A FULL JOIN mindkét tábla minden sorát visszaadja. Ha a JOIN feltételnek megfelelő sorok találhatók mindkét táblában, azok összekapcsolódnak. Ha valamelyik táblában nincs megfelelő sor, a másik tábla oszlopai NULL értékeket kapnak. Nem minden adatbázis-kezelő rendszer támogatja ezt a JOIN típust (pl. MySQL nem).
CROSS JOIN
A CROSS JOIN minden lehetséges kombinációt visszaadja a két tábla soraiból. Ez azt jelenti, hogy ha az egyik táblában 3 sor van, a másikban pedig 4, akkor a CROSS JOIN eredménye 12 sor lesz. Általában nem hasznos a valós adatbázis-kezelésben, de bizonyos speciális esetekben alkalmazható.
JOIN feltételek
A JOIN feltétel határozza meg, hogy mely sorokat kell összekapcsolni a táblákban. Általában az ON
kulcsszó után adjuk meg. A leggyakoribb feltétel az, hogy két tábla azonos nevű oszlopának értéke megegyezik (pl. Vevők.ID = Rendelések.Vevő_ID
).
Fontos, hogy a JOIN feltétel pontos és egyértelmű legyen, különben hibás vagy váratlan eredményeket kaphatunk.
Aliasok használata
A táblák nevének rövidítésére aliasokat használhatunk, ami leegyszerűsíti a lekérdezéseket és javítja az olvashatóságot. Az aliasokat az AS
kulcsszóval adhatjuk meg, bár ez nem kötelező.
Példa:
SELECT v.Név, r.Dátum
FROM Vevők AS v
INNER JOIN Rendelések AS r ON v.ID = r.Vevő_ID;
Ebben a példában a Vevők
tábla aliasa v
, a Rendelések
tábla aliasa pedig r
.
Összefoglalás
A táblák összekapcsolása az adatbázis-kezelés egyik alapköve. A különböző JOIN típusok segítségével komplex lekérdezéseket hajthatunk végre, és az adatok közötti kapcsolatokat feltárhatjuk. Reméljük, hogy ez a cikk segített megérteni a JOIN alapjait, és magabiztosabban vághatsz bele az adatbázis-programozásba!