SQL Self-Join

Sql Self Join



A relációs adatbázisok egyik legismertebb funkciója az összekapcsolás. Az összekapcsolás a relációs adatbázisok egyik leghatékonyabb és legösszetettebb funkciója. Széles körű modularitást és nagyon összetett kapcsolatokat tesznek lehetővé az adatbázistáblák között anélkül, hogy a teljesítményt veszélyeztetnék.

Az SQL-ben azonban van egyfajta csatlakozás, amely általában a radar alá kerül, és amelyet öncsatlakozásnak neveznek.

Az SQL-ben az önillesztés egy olyan hatékony technika, amely lehetővé teszi, hogy ugyanazon tábla sorait egy kapcsolódó oszlop alapján kombináljuk ugyanazon a táblán belül.







Ellentétben az SQL más típusú összekapcsolásával, ahol több táblából vesszük az adatokat, az önillesztés egyetlen táblán működik.



Elgondolkodhat azon, hogy miért van szükségem öncsatlakozásra, ha kikereshetem az adatokat magából a táblából? Bár ez igaz lehet, az önálló csatlakozás segíthet olyan feladatokban, amikor rekurzív adatlekérdezéseket kell végrehajtania, vagy hierarchikus adatokat kell keresnie.



Lényegében az öncsatlakozás alapvető szerepet játszik abban az esetben, ha össze kell hasonlítania ugyanazon táblázat sorait.





Csatlakozzon hozzánk ebben a bejegyzésben, miközben feltárjuk, mik azok az öncsatlakozások, hogyan működnek, és hogyan használhatjuk őket egy SQL-táblázatban.

MEGJEGYZÉS: Mielőtt belemerülnénk, felállítunk egy alapasztalt bemutató célból. Ön azonban bármilyen támogatott adatkészletet szeretne használni.



Minta adat

A következő lekérdezések létrehozzák a termékinformációkat tartalmazó alaptáblázatot, és beillesztik a mintarekordokat a táblába. Ez lehetővé teszi számunkra, hogy bemutassuk, hogyan kell dolgozni a self-join-okkal SQL-ben.

TÁBLÁZAT LÉTREHOZÁSA Termékek (
product_id INT PRIMARY KEY,
termék_neve VARCHAR(255) NOT NULL,
szülő_azonosító INT
);

Adjon hozzá 10 mintarekordot a táblázathoz.

INSERT INTO Termékek (termékazonosító, terméknév, szülőazonosító) ÉRTÉKEK
(1, 'Elektronika', NULL),
(2, 'okostelefonok', 1),
(3, 'Laptopok', 1),
(4, „iPhone 13”, 2),
(5, „Samsung Galaxy S21”, 2),
(6, 'MacBook Pro', 3),
(7, „Dell XPS 15”, 3),
(8, 'Kiegészítők', NULL),
(9, „Telefontokok”, 8),
(10, „Laptop táskák”, 8);

Az eredményül kapott táblázat a következő:

1. példa: Alapszintű öncsatlakozás

Kezdjük egy alapvető öncsatlakozással. Például egy egyszerű öncsatlakozással lekérhetjük ugyanannak a táblának a szülő-gyermek kapcsolatát.

Használhatjuk például az összes termék és a hozzájuk tartozó anyatermékek megkeresésére. A lekérdezést a következőképpen futtathatjuk:

SELECT c.product_name AS gyermektermék, p.terméknév AS szülő_termék
A termékekből c
LEFT JOIN Products p ON c.parent_id = p.product_id;

Az adott példalekérdezésben a „c” karaktert használjuk az utódtermékeket képviselő terméktáblázat álneveként.

Létrehozzuk a „p” álnevet is a terméktáblázathoz, amely a szülőtermékeket képviseli.

A következő lépésben egy alapvető SQL LEFT JOIN segítségével biztosítjuk, hogy a legfelső szintű termékek szerepeljenek az eredményben.

Végül az ON záradékot használjuk a gyermek- és a szülőrekordok közötti kapcsolat létrehozására a „parent_id” és a „product_id” oszlopok használatával.

Az eredményül kapott táblázat a következő:

Észre fogja venni, hogy a szülőtermékek nem rendelkeznek felső hivatkozással, mivel a hierarchia tetején vannak, amelyeket gyökérelemeknek is neveznek.

2. példa: Hierarchikus adatok lekérése

Az öncsatlakozás egyik legalapvetőbb szerepe a hierarchikus adatok lekérése. Tegyük fel például, hogy minden olyan gyermekterméket szeretnénk lekérni, ahol a termék megegyezik a „Kiegészítők” értékkel. A lekérdezést önálló csatlakozással futtathatjuk a következőképpen:

SELECT c.product_name AS child_product
A termékekből c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Kiegészítők';

Ebben az esetben egy JOIN segítségével kombináljuk a termékek tábláját önmagával, majd a WHERE záradékkal kiszűrjük a kívánt eredményeket.

Következtetés

Ebben az oktatóanyagban megvizsgáltuk, hogy mi az önálló csatlakozás, hogyan működik, és hogyan használhatjuk az SQL táblában hierarchikus adatok lekérésére vagy rekurzív lekérdezések végrehajtására.