Samosprzężenie SQL

Samosprzezenie Sql



Jedną z najbardziej znanych funkcji relacyjnych baz danych są łączenia. Złączenia są jedną z najpotężniejszych i najbardziej złożonych funkcji relacyjnych baz danych. Pozwalają na dużą modułowość i bardzo złożone relacje między tabelami bazy danych bez uszczerbku dla wydajności.

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_rodzica
Z 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ędny
Z 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.