Istnieje jednak rodzaj łączenia w języku SQL, który zwykle pozostaje niezauważony i jest znany jako samosprzężenie.
W języku SQL samołączenie jest potężną techniką, która pozwala nam łączyć wiersze z tej samej tabeli w oparciu o powiązaną kolumnę w tej samej tabeli.
W przeciwieństwie do innych typów złączeń w języku SQL, w których pobieramy dane z wielu tabel, złącze samoczynne działa na pojedynczej tabeli.
Możesz się zastanawiać, dlaczego potrzebuję samodzielnego złączenia, skoro mogę wyszukiwać dane z samej tabeli? Chociaż może to być prawdą, samosprzężenie może pomóc w zadaniach, gdy trzeba wykonać rekurencyjne zapytania o dane lub znaleźć dane hierarchiczne.
Zasadniczo samołączenie odgrywa zasadniczą rolę, gdy trzeba porównać wiersze tej samej tabeli.
Dołącz do nas w tym poście, gdy będziemy badać, czym są samozłączenia, jak działają i jak możemy je wykorzystać w tabeli SQL.
UWAGA: Zanim zagłębimy się w szczegóły, przygotujemy podstawowy stół w celach demonstracyjnych. Możesz jednak użyć dowolnego obsługiwanego zestawu danych.
Przykładowe dane
Poniższe zapytania tworzą podstawową tabelę zawierającą informacje o produkcie i wstawiają do niej przykładowe rekordy. Dzięki temu możemy zademonstrować, jak pracować z samozłączeniami w SQL.
UTWÓRZ TABELI Produkty (Product_id INT KLUCZ PODSTAWOWY,
nazwa_produktu VARCHAR(255) NIE NULL,
identyfikator_rodzica INT
);
Dodaj 10 przykładowych rekordów do tabeli.
WSTAW DO PRODUKTÓW (id_produktu, nazwa_produktu, identyfikator_rodzica) WARTOŚCI(1, „Elektronika”, NULL),
(2, „Smartfony”, 1),
(3, „Laptopy”, 1),
(4, „iPhone 13”, 2),
(5, „Samsung Galaxy S21”, 2),
(6, „MacBook Pro”, 3),
(7, „Dell XPS 15”, 3),
(8, „Akcesoria”, NULL),
(9, „Etui na telefony”, 8),
(10, „Torby na laptopa”, 8);
Wynikowa tabela wygląda następująco:
Przykład 1: Podstawowe samołączenie
Zacznijmy od podstawowego samodzielnego łączenia. Na przykład możemy użyć prostego samodzielnego złączenia, aby odzyskać relację rodzic-dziecko tej samej tabeli.
Możemy go na przykład użyć do znalezienia wszystkich produktów i odpowiadających im produktów nadrzędnych. Zapytanie możemy uruchomić w następujący sposób:
WYBIERZ c.nazwa_produktu jako produkt_podrzędny, p.nazwa_produktu jako produkt_rodzicaZ produktów c
LEWY DOŁĄCZ Produkty p ON c.parent_id = p.product_id;
W podanym przykładowym zapytaniu używamy „c” jako aliasu tabeli produktów, która reprezentuje produkty podrzędne.
Tworzymy także alias „p” dla tabeli produktów, który będzie reprezentował produkty nadrzędne.
W następnym kroku używamy podstawowego SQL LEFT JOIN, aby mieć pewność, że w wyniku zostaną uwzględnione produkty najwyższego poziomu.
Na koniec używamy klauzuli ON, aby utworzyć relację między rekordami podrzędnymi i nadrzędnymi za pomocą kolumn „parent_id” i „product_id”.
Wynikowa tabela wygląda następująco:
Zauważysz, że produkty nadrzędne nie mają górnego łącza, ponieważ znajdują się na szczycie hierarchii, zwanej również elementami głównymi.
Przykład 2: Pobieranie danych hierarchicznych
Jedną z najbardziej podstawowych ról samodzielnego łączenia jest pobieranie danych hierarchicznych. Załóżmy na przykład, że chcemy pobrać wszystkie produkty podrzędne, których produkt jest równy „Akcesoria”. Możemy uruchomić zapytanie za pomocą samosprzężenia w następujący sposób:
WYBIERZ c.nazwa_produktu JAKO produkt_podrzędnyZ produktów c
DOŁĄCZ Produkty p ON c.parent_id = p.product_id
GDZIE p.product_name = 'Akcesoria';
W tym przypadku używamy JOIN, aby połączyć tabelę produktów ze sobą, a następnie używamy klauzuli WHERE, aby odfiltrować żądane wyniki.
Wniosek
W tym samouczku omówiliśmy, czym jest samosprzężenie, jak działa i jak możemy go użyć w tabeli SQL do pobierania danych hierarchicznych lub wykonywania zapytań rekurencyjnych.