SQL Self-Join

Sql Self Join



Jedna od najpoznatijih značajki relacijskih baza podataka su spojevi. Spojevi su jedna od najmoćnijih i najsloženijih značajki relacijskih baza podataka. Omogućuju opsežnu modularnost i vrlo složene odnose između tablica baze podataka bez ugrožavanja izvedbe.

Međutim, postoji vrsta spajanja u SQL-u koja obično prođe ispod radara, a koja je poznata kao samopridruživanje.

U SQL-u, samozdruživanje je moćna tehnika koja nam omogućuje kombiniranje redaka iz iste tablice na temelju povezanog stupca unutar iste tablice.







Za razliku od druge vrste spajanja u SQL-u gdje uzimamo podatke iz više tablica, samospojivanje radi na jednoj tablici.



Možda se pitate zašto mi je potrebno samopridruživanje kada mogu tražiti podatke iz same tablice? Iako bi to moglo biti točno, samopridruživanje može pomoći u zadacima kada trebate izvršiti rekurzivne upite podataka ili pronaći hijerarhijske podatke.



U biti, samopridruživanje igra temeljnu ulogu kada trebate usporediti retke iste tablice.





Pridružite nam se u ovom postu dok istražujemo što su samospajanja, kako funkcioniraju i kako ih možemo koristiti u SQL tablici.

NAPOMENA: Prije nego što krenemo, postavit ćemo osnovnu tablicu u svrhu demonstracije. Međutim, možete koristiti bilo koji podržani skup podataka.



Uzorak podataka

Sljedeći upiti stvaraju osnovnu tablicu koja sadrži informacije o proizvodu i umeće ogledne zapise u tablicu. To nam omogućuje da pokažemo kako raditi sa samospajanjima u SQL-u.

CREATE TABLE Proizvodi (
product_id INT PRIMARNI KLJUČ,
naziv_proizvoda VARCHAR(255) NOT NULL,
parent_id INT
);

Dodajte 10 oglednih zapisa u tablicu.

INSERT INTO Products (product_id, product_name, parent_id) VRIJEDNOSTI
(1, 'Elektronika', NULL),
(2, 'Pametni telefoni', 1),
(3, 'Prijenosna računala', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Dodaci', NULL),
(9, 'Torbice za telefone', 8),
(10, 'Torbe za prijenosna računala', 8);

Dobivena tablica je sljedeća:

Primjer 1: Osnovno samopridruživanje

Počnimo s osnovnim samopridruživanjem. Na primjer, možemo koristiti jednostavno samopridruživanje za dohvaćanje odnosa roditelj-dijete iste tablice.

Na primjer, možemo ga koristiti za pronalaženje svih proizvoda i njihovih odgovarajućih matičnih proizvoda. Upit možemo pokrenuti na sljedeći način:

SELECT c.product_name AS child_product, p.product_name AS parent_product
OD proizvoda c
LEFT JOIN Proizvodi p ON c.parent_id = p.product_id;

U danom primjeru upita koristimo 'c' kao alias za tablicu proizvoda koja predstavlja podređene proizvode.

Također stvaramo pseudonim 'p' za tablicu proizvoda za predstavljanje nadređenih proizvoda.

U sljedećem koraku koristimo osnovni SQL LEFT JOIN kako bismo osigurali da su proizvodi najviše razine uključeni u rezultat.

Na kraju, koristimo klauzulu ON za stvaranje odnosa između podređenih i nadređenih zapisa pomoću stupaca 'parent_id' i 'product_id'.

Dobivena tablica je sljedeća:

Primijetit ćete da nadređeni proizvodi nemaju gornju vezu budući da su na vrhu hijerarhije koji su također poznati kao korijenski elementi.

Primjer 2: Dohvaćanje hijerarhijskih podataka

Jedna od najosnovnijih uloga samopridruživanja je dohvaćanje hijerarhijskih podataka. Na primjer, pretpostavimo da želimo dohvatiti sve podređene proizvode gdje je proizvod jednak 'Dodatnoj opremi'. Upit možemo pokrenuti pomoću samopridruživanja na sljedeći način:

SELECT c.product_name KAO child_product
OD proizvoda c
PRIDRUŽITE SE proizvodima p ON c.parent_id = p.product_id
WHERE p.product_name = 'Dodatna oprema';

U ovom slučaju koristimo JOIN za kombiniranje tablice proizvoda sa samom sobom, a zatim koristimo klauzulu WHERE za filtriranje rezultata koje želimo.

Zaključak

U ovom vodiču istražili smo što je samopridruživanje, kako funkcionira i kako ga možemo koristiti u SQL tablici za dohvaćanje hijerarhijskih podataka ili izvođenje rekurzivnih upita.