SQL Self-Join

Sql Self Join



En av de mest kjente egenskapene til relasjonsdatabaser er sammenføyninger. Sammenføyninger er en av de kraftigste og mest komplekse egenskapene til relasjonsdatabaser. De tillater omfattende modularitet og svært komplekse relasjoner mellom databasetabeller uten at det går på bekostning av ytelsen.

Imidlertid er det en type sammenføyning i SQL som har en tendens til å gå under radaren, som er kjent som en selvkobling.

I SQL er en selvkobling en kraftig teknikk som lar oss kombinere radene fra samme tabell basert på en relatert kolonne i samme tabell.







I motsetning til den andre typen sammenføyninger i SQL hvor vi tar dataene fra flere tabeller, fungerer en selvkobling på en enkelt tabell.



Du lurer kanskje på hvorfor jeg trenger en selvkobling når jeg kan slå opp dataene fra selve tabellen? Selv om det kan være sant, kan en selvkobling hjelpe deg med oppgaver når du trenger å utføre rekursive dataspørringer eller finne hierarkiske data.



I hovedsak spiller en selvkobling en grunnleggende rolle der du må sammenligne radene i samme tabell.





Bli med oss ​​i dette innlegget mens vi utforsker hva selvkoblinger er, hvordan de fungerer og hvordan vi kan bruke dem i en SQL-tabell.

MERK: Før vi dykker inn, vil vi sette opp et grunnleggende bord for demonstrasjonsformål. Du føler deg imidlertid for å bruke ethvert støttet datasett.



Eksempeldata

Følgende spørringer oppretter en grunnleggende tabell som inneholder produktinformasjon og setter inn eksempelpostene i tabellen. Dette lar oss demonstrere hvordan vi jobber med selvkoblingene i SQL.

LAG TABELL produkter (
product_id INT PRIMÆR NØKKEL,
produktnavn VARCHAR(255) IKKE NULL,
parent_id INT
);

Legg til 10 eksempelposter i tabellen.

INSERT INTO Products (product_id, product_name, parent_id) VERDIER
(1, 'Elektronikk', NULL),
(2, 'Smarttelefoner', 1),
(3, 'Bærbare datamaskiner', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Tilbehør', NULL),
(9, 'Telefonsaker', 8),
(10, 'Bærbare vesker', 8);

Den resulterende tabellen er som følger:

Eksempel 1: Basic Self-Join

La oss starte med en grunnleggende selvtilknytning. For eksempel kan vi bruke en enkel selvkobling for å hente foreldre-barn-relasjonen til samme tabell.

For eksempel kan vi bruke den til å finne alle produktene og deres tilsvarende overordnede produkter. Vi kan kjøre en spørring som følger:

VELG c.product_name AS child_product, p.product_name AS parent_product
FRA produkter c
LEFT JOIN Products p ON c.parent_id = p.product_id;

I den gitte eksempelspørringen bruker vi 'c' som et alias for produkttabellen som representerer de underordnede produktene.

Vi oppretter også 'p'-aliaset for produkttabellen for å representere overordnede produkter.

I neste trinn bruker vi en grunnleggende SQL LEFT JOIN for å sikre at toppnivåproduktene er inkludert i resultatet.

Til slutt bruker vi ON-klausulen for å opprette en relasjon mellom underordnede og overordnede poster ved å bruke kolonnene 'parent_id' og 'product_id'.

Den resulterende tabellen er som følger:

Du vil legge merke til at overordnede produktene ikke har en topplenke da de er øverst i hierarkiet som også er kjent som rotelementene.

Eksempel 2: Hent hierarkiske data

En av de mest grunnleggende rollene til en selvtilknytning er å hente hierarkiske data. Anta for eksempel at vi ønsker å hente alle barneprodukter der produktet er lik 'Tilbehør'. Vi kan kjøre spørringen ved å bruke en selvkobling som følger:

VELG c.product_name AS child_product
FRA produkter c
BLI MED produkter p PÅ c.parent_id = p.product_id
WHERE p.product_name = 'Tilbehør';

I dette tilfellet bruker vi en JOIN for å kombinere produkttabellen med seg selv og bruker deretter WHERE-klausulen for å filtrere ut resultatene vi ønsker.

Konklusjon

I denne opplæringen utforsket vi hva en selvkobling er, hvordan den fungerer, og hvordan vi kan bruke den i SQL-tabellen for å hente hierarkiske data eller utføre rekursive spørringer.