SQL Self-Join

Sql Self Join



Jednou z nejznámějších funkcí relačních databází jsou spojení. Spojení jsou jednou z nejvýkonnějších a nejkomplexnějších funkcí relačních databází. Umožňují rozsáhlou modularitu a velmi složité vztahy mezi databázovými tabulkami, aniž by došlo ke snížení výkonu.

Existuje však typ spojení v SQL, který má tendenci jít pod radar, který je známý jako self-join.

V SQL je self-join výkonná technika, která nám umožňuje kombinovat řádky ze stejné tabulky na základě souvisejícího sloupce ve stejné tabulce.







Na rozdíl od jiného typu spojení v SQL, kde bereme data z více tabulek, samostatné spojení funguje na jedné tabulce.



Možná se divíte, proč potřebuji vlastní připojení, když mohu vyhledat data ze samotné tabulky? I když to může být pravda, vlastní připojení může pomoci v úkolech, když potřebujete provádět rekurzivní datové dotazy nebo najít hierarchická data.



Vlastní spojení hraje v podstatě zásadní roli, když potřebujete porovnat řádky stejné tabulky.





Připojte se k nám v tomto příspěvku, když prozkoumáme, co jsou samospojení, jak fungují a jak je můžeme použít v tabulce SQL.

POZNÁMKA: Než se ponoříme, připravíme základní tabulku pro demonstrační účely. Máte však pocit, že používáte jakoukoli podporovanou datovou sadu.



Vzorek dat

Následující dotazy vytvoří základní tabulku obsahující informace o produktu a vloží do tabulky ukázkové záznamy. To nám umožňuje demonstrovat, jak pracovat s vlastními spojeními v SQL.

CREATE TABLE Products (
product_id INT PRIMARY KEY,
název_produktu VARCHAR(255) NOT NULL,
parent_id INT
);

Přidejte 10 vzorových záznamů do tabulky.

INSERT INTO Products (product_id, product_name, parent_id) VALUES
(1, 'Elektronika', NULL),
(2, 'Smartphony', 1),
(3, 'Laptopy', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Příslušenství', NULL),
(9, 'Pouzdra na telefon', 8),
(10, 'Tašky na notebooky', 8);

Výsledná tabulka je následující:

Příklad 1: Základní vlastní připojení

Začněme základním vlastním spojením. Například můžeme použít jednoduché vlastní spojení k načtení vztahu rodič-dítě stejné tabulky.

Můžeme jej použít například k vyhledání všech produktů a jim odpovídajících nadřazených produktů. Dotaz můžeme spustit následovně:

SELECT c.product_name AS podřízený_produkt, p.product_name AS nadřazený_produkt
Z produktů c
LEFT JOIN Products p ON c.parent_id = p.product_id;

V uvedeném příkladu dotazu používáme „c“ jako alias pro tabulku produktů, která představuje podřízené produkty.

Vytvoříme také alias „p“ pro tabulku produktů, která bude reprezentovat nadřazené produkty.

V dalším kroku použijeme základní SQL LEFT JOIN, abychom zajistili, že do výsledku budou zahrnuty produkty nejvyšší úrovně.

Nakonec používáme klauzuli ON k vytvoření vztahu mezi podřízenými a nadřazenými záznamy pomocí sloupců „parent_id“ a „product_id“.

Výsledná tabulka je následující:

Všimnete si, že nadřazené produkty nemají horní odkaz, protože jsou na vrcholu hierarchie, které jsou také známé jako kořenové prvky.

Příklad 2: Načtení hierarchických dat

Jednou z nejzákladnějších rolí vlastního spojení je získávání hierarchických dat. Předpokládejme například, že chceme načíst všechny podřízené produkty, kde se produkt rovná „Příslušenství“. Dotaz můžeme spustit pomocí vlastního spojení takto:

SELECT c.product_name AS child_product
Z produktů c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Příslušenství';

V tomto případě používáme JOIN ke spojení tabulky produktů se sebou samým a pak pomocí klauzule WHERE odfiltrujeme výsledky, které chceme.

Závěr

V tomto tutoriálu jsme prozkoumali, co je self-join, jak funguje a jak jej můžeme použít v tabulce SQL k načtení hierarchických dat nebo provádění rekurzivních dotazů.