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ý_produktZ 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_productZ 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ů.