SQL Self-Join

Sql Self Join



Ena najbolj znanih lastnosti relacijskih baz podatkov so združevanja. Spoji so ena najmočnejših in najkompleksnejših funkcij relacijskih baz podatkov. Omogočajo obsežno modularnost in zelo zapletena razmerja med tabelami baze podatkov, ne da bi pri tem ogrozili zmogljivost.

Vendar pa obstaja vrsta združevanja v SQL, ki gre pogosto izpod radarja in je znana kot samozdruževanje.

V SQL je samozdruževanje zmogljiva tehnika, ki nam omogoča združevanje vrstic iz iste tabele na podlagi povezanega stolpca znotraj iste tabele.







Za razliko od druge vrste združevanj v SQL, kjer vzamemo podatke iz več tabel, samozdruževanje deluje na eni sami tabeli.



Morda se sprašujete, zakaj potrebujem samozdruževanje, ko lahko poiščem podatke iz same tabele? Čeprav je to morda res, lahko samozdruževanje pomaga pri nalogah, ko morate izvajati rekurzivne podatkovne poizvedbe ali najti hierarhične podatke.



V bistvu ima samozdruževanje temeljno vlogo, kjer morate primerjati vrstice iste tabele.





Pridružite se nam v tej objavi, ko raziskujemo, kaj so samozdruževanja, kako delujejo in kako jih lahko uporabimo v tabeli SQL.

OPOMBA: Preden se poglobimo, bomo postavili osnovno tabelo za namene predstavitve. Vendar pa lahko uporabite kateri koli podprt nabor podatkov.



Vzorčni podatki

Naslednje poizvedbe ustvarijo osnovno tabelo z informacijami o izdelku in v tabelo vstavijo vzorčne zapise. To nam omogoča, da pokažemo, kako delati s samozdruževanjem v SQL.

CREATE TABLE Izdelki (
product_id INT PRIMARNI KLJUČ,
ime_izdelka VARCHAR(255) NI NULL,
parent_id INT
);

V tabelo dodajte 10 vzorčnih zapisov.

INSERT INTO Products (product_id, product_name, parent_id) VREDNOSTI
(1, 'Elektronika', NULL),
(2, 'Pametni telefoni', 1),
(3, 'Prenosni računalniki', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Dodatki', NULL),
(9, 'Ovitki za telefone', 8),
(10, 'Torbe za prenosnike', 8);

Končna tabela je naslednja:

Primer 1: Osnovno samozdruževanje

Začnimo z osnovnim samozdruževanjem. Na primer, lahko uporabimo preprosto samozdruževanje, da pridobimo razmerje nadrejeni-podrejeni za isto tabelo.

Uporabimo ga lahko na primer za iskanje vseh izdelkov in njihovih ustreznih matičnih izdelkov. Poizvedbo lahko izvedemo na naslednji način:

IZBERITE c.product_name KOT podrejeni_izdelek, p.product_name KOT nadrejeni_izdelek
OD izdelkov c
LEFT JOIN Izdelki p ON c.parent_id = p.product_id;

V danem primeru poizvedbe uporabljamo »c« kot vzdevek za tabelo izdelkov, ki predstavlja podrejene izdelke.

Ustvarimo tudi vzdevek »p« za tabelo izdelkov, ki predstavlja nadrejene izdelke.

V naslednjem koraku uporabimo osnovni SQL LEFT JOIN, da zagotovimo, da so izdelki najvišje ravni vključeni v rezultat.

Nazadnje uporabimo klavzulo ON, da ustvarimo razmerje med podrejenimi in nadrejenimi zapisi z uporabo stolpcev »parent_id« in »product_id«.

Končna tabela je naslednja:

Opazili boste, da nadrejeni izdelki nimajo zgornje povezave, saj so na vrhu hierarhije, kar je znano tudi kot korenski elementi.

2. primer: pridobivanje hierarhičnih podatkov

Ena najbolj temeljnih vlog samozdruževanja je pridobivanje hierarhičnih podatkov. Denimo, da želimo pridobiti vse podrejene izdelke, kjer je izdelek enak »Dodatki«. Poizvedbo lahko zaženemo z uporabo samozdruževanja na naslednji način:

IZBERITE c.product_name AS child_product
OD izdelkov c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Dodatki';

V tem primeru uporabimo JOIN, da združimo tabelo izdelkov s samo seboj, nato pa uporabimo člen WHERE, da filtriramo želene rezultate.

Zaključek

V tej vadnici smo raziskali, kaj je samozdruževanje, kako deluje in kako ga lahko uporabimo v tabeli SQL za pridobivanje hierarhičnih podatkov ali izvajanje rekurzivnih poizvedb.