SQL savarankiškas prisijungimas

Sql Savarankiskas Prisijungimas



Viena žinomiausių reliacinių duomenų bazių savybių yra sujungimai. Sujungimai yra viena iš galingiausių ir sudėtingiausių reliacinių duomenų bazių funkcijų. Jie leidžia užtikrinti platų moduliškumą ir labai sudėtingus ryšius tarp duomenų bazių lentelių, nepakenkiant našumui.

Tačiau SQL yra prisijungimo tipas, kuris paprastai patenka į radarą, kuris yra žinomas kaip savarankiškas prisijungimas.

SQL sistemoje savaiminis sujungimas yra galinga technika, leidžianti sujungti tos pačios lentelės eilutes pagal susijusį stulpelį toje pačioje lentelėje.







Skirtingai nuo kitų tipų SQL sujungimų, kai duomenis gauname iš kelių lentelių, savarankiškas sujungimas veikia vienoje lentelėje.



Jums gali kilti klausimas, kodėl man reikia savarankiško prisijungimo, kai galiu ieškoti duomenų iš pačios lentelės? Nors tai gali būti tiesa, savarankiškas sujungimas gali padėti atliekant užduotis, kai reikia atlikti rekursines duomenų užklausas arba rasti hierarchinius duomenis.



Iš esmės savarankiškas sujungimas atlieka esminį vaidmenį, kai reikia palyginti tos pačios lentelės eilutes.





Prisijunkite prie mūsų šiame įraše, kai išsiaiškinsime, kas yra savaiminis sujungimas, kaip jie veikia ir kaip galime juos naudoti SQL lentelėje.

PASTABA: Prieš pasinerdami, mes paruošime pagrindinį stalą demonstravimo tikslais. Tačiau manote, kad naudojate bet kokį palaikomą duomenų rinkinį.



Duomenų pavyzdžiai

Šios užklausos sukuria pagrindinę lentelę, kurioje yra produkto informacija, ir į lentelę įterpia pavyzdinius įrašus. Tai leidžia mums parodyti, kaip dirbti su savaiminiais sujungimais SQL.

KURTI LENTELĘ Produktus (
product_id INT PRIMARY KEY,
produkto_pavadinimas VARCHAR(255) NOT NULL,
tėvų_id INT
);

Į lentelę pridėkite 10 įrašų pavyzdžių.

INSERT INTO Produktų (produkto_id, produkto_pavadinimas, tėvų_id) VERTĖS
(1, „Elektronika“, NULL),
(2, „Išmanieji telefonai“, 1),
(3, „Nešiojamieji kompiuteriai“, 1),
(4, „iPhone 13“, 2),
(5, „Samsung Galaxy S21“, 2),
(6, „MacBook Pro“, 3),
(7, „Dell XPS 15“, 3),
(8, „Priedai“, NULL),
(9, „Telefonų dėklai“, 8),
(10, „Nešiojamojo kompiuterio krepšiai“, 8);

Gauta lentelė yra tokia:

1 pavyzdys: Pagrindinis savarankiškas prisijungimas

Pradėkime nuo pagrindinio savarankiško prisijungimo. Pavyzdžiui, galime naudoti paprastą savarankišką sujungimą, kad gautume tos pačios lentelės tėvų ir vaikų santykius.

Pavyzdžiui, galime jį naudoti norėdami rasti visus produktus ir atitinkamus pagrindinius produktus. Užklausą galime vykdyti taip:

PASIRINKITE c.produkto_pavadinimas AS vaiko_produktas, p.produkto_pavadinimas AS pirminis_produktas
IŠ produktų c
LEFT JOIN Produktai p ĮJUNGTI c.parent_id = p.product_id;

Pateiktoje užklausos pavyzdyje naudojame „c“ kaip produktų lentelės, kuri žymi antrinius produktus, slapyvardį.

Taip pat sukuriame gaminių lentelės slapyvardį „p“, kuris atspindi pirminius produktus.

Kitame žingsnyje naudojame pagrindinį SQL LEFT JOIN, kad užtikrintume, jog aukščiausio lygio produktai būtų įtraukti į rezultatą.

Galiausiai, mes naudojame sąlygą ON, kad sukurtume ryšį tarp antrinių ir pirminių įrašų, naudodami stulpelius „parent_id“ ir „product_id“.

Gauta lentelė yra tokia:

Pastebėsite, kad pirminiai produktai neturi viršutinės nuorodos, nes jie yra hierarchijos viršuje, kurie taip pat žinomi kaip šakniniai elementai.

2 pavyzdys: gaukite hierarchinius duomenis

Vienas iš svarbiausių savarankiško prisijungimo vaidmenų yra hierarchinių duomenų gavimas. Pavyzdžiui, tarkime, kad norime gauti visus antrinius produktus, kurių produktas yra lygus „Priedai“. Užklausą galime vykdyti naudodami savarankišką prisijungimą taip:

PASIRINKITE c.produkto_pavadinimas AS vaikas_produktas
IŠ produktų c
PRISIJUNGTI prie produktų p ON c.parent_id = p.product_id
WHERE p.product_name = 'Priedai';

Šiuo atveju naudojame JOIN, kad produktų lentelę sujungtume su savimi, o tada naudojame WHERE sąlygą, kad išfiltruotume norimus rezultatus.

Išvada

Šioje pamokoje mes ištyrėme, kas yra savarankiškas prisijungimas, kaip jis veikia ir kaip galime jį naudoti SQL lentelėje norėdami gauti hierarchinius duomenis arba atlikti rekursines užklausas.