SQL Self-Join

Sql Self Join



En av de mest kända egenskaperna hos relationsdatabaser är kopplingar. Joins är en av de mest kraftfulla och komplexa funktionerna i relationsdatabaser. De möjliggör omfattande modularitet och mycket komplexa relationer mellan databastabeller utan att kompromissa med prestandan.

Det finns dock en typ av join i SQL som tenderar att gå under radarn som är känd som en self-join.

I SQL är en självkoppling en kraftfull teknik som låter oss kombinera raderna från samma tabell baserat på en relaterad kolumn i samma tabell.







Till skillnad från den andra typen av joins i SQL där vi tar data från flera tabeller, fungerar en self-join på en enda tabell.



Du kanske undrar varför jag behöver en självanslutning när jag kan slå upp data från själva tabellen? Även om det kan vara sant, kan en självanslutning hjälpa till i uppgifter när du behöver utföra rekursiva datafrågor eller hitta hierarkiska data.



I grund och botten spelar en självkoppling en grundläggande roll där du måste jämföra raderna i samma tabell.





Följ med oss ​​i det här inlägget när vi utforskar vad självanslutningar är, hur de fungerar och hur vi kan använda dem i en SQL-tabell.

OBS: Innan vi dyker in kommer vi att ställa upp ett grundläggande bord för demonstrationsändamål. Du känner dock att du använder vilken datauppsättning som helst som stöds.



Stickprov

Följande frågor skapar en grundläggande tabell som innehåller produktinformation och infogar exempelposterna i tabellen. Detta gör att vi kan demonstrera hur man arbetar med självanslutningar i SQL.

SKAPA TABELL Produkter (
product_id INT PRIMÄR NYCKEL,
produktnamn VARCHAR(255) NOT NULL,
parent_id INT
);

Lägg till 10 exempelposter i tabellen.

INSERT INTO Products (product_id, product_name, parent_id) VÄRDEN
(1, 'Elektronik', NULL),
(2, 'Smartphones', 1),
(3, 'Bärbara datorer', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Tillbehör', NULL),
(9, 'Telefonfodral', 8),
(10, 'Bärbara väskor', 8);

Den resulterande tabellen är som följer:

Exempel 1: Basic Self-Join

Låt oss börja med en grundläggande självanslutning. Till exempel kan vi använda en enkel självkoppling för att hämta förälder-barn-relationen för samma tabell.

Till exempel kan vi använda den för att hitta alla produkter och deras motsvarande moderprodukter. Vi kan köra en fråga enligt följande:

VÄLJ c.product_name AS child_product, p.product_name AS parent_product
FRÅN Produkter c
LEFT JOIN Produkter p ON c.parent_id = p.product_id;

I den givna exempelfrågan använder vi 'c' som ett alias för produkttabellen som representerar de underordnade produkterna.

Vi skapar också 'p'-aliaset för produkttabellen för att representera överordnade produkter.

I nästa steg använder vi en grundläggande SQL LEFT JOIN för att säkerställa att produkterna på toppnivån ingår i resultatet.

Slutligen använder vi ON-satsen för att skapa en relation mellan underordnade och överordnade poster med hjälp av kolumnerna 'parent_id' och 'product_id'.

Den resulterande tabellen är som följer:

Du kommer att märka att moderprodukterna inte har en topplänk eftersom de är överst i hierarkin som även kallas rotelementen.

Exempel 2: Hämta hierarkisk data

En av de mest grundläggande rollerna för en självanslutning är att hämta hierarkisk data. Anta till exempel att vi vill hämta alla underordnade produkter där produkten är lika med 'Tillbehör'. Vi kan köra frågan med en självanslutning enligt följande:

VÄLJ c.product_name AS child_product
FRÅN Produkter c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Tillbehör';

I det här fallet använder vi en JOIN för att kombinera produkttabellen med sig själv och använder sedan WHERE-satsen för att filtrera bort de resultat vi vill ha.

Slutsats

I den här handledningen utforskade vi vad en självkoppling är, hur den fungerar och hur vi kan använda den i SQL-tabellen för att hämta hierarkisk data eller utföra rekursiva frågor.