SQL pašpievienošanās

Sql Paspievienosanas



Viena no slavenākajām relāciju datu bāzu iezīmēm ir pievienošanās. Savienojumi ir viena no spēcīgākajām un sarežģītākajām relāciju datu bāzu funkcijām. Tie nodrošina plašu modularitāti un ļoti sarežģītas attiecības starp datu bāzes tabulām, neapdraudot veiktspēju.

Tomēr SQL ir savs pievienošanās veids, kas parasti tiek pakļauts radaram, ko sauc par pašsavienošanos.

SQL pašsavienošanās ir spēcīgs paņēmiens, kas ļauj apvienot rindas no vienas tabulas, pamatojoties uz saistītu kolonnu tajā pašā tabulā.







Atšķirībā no cita veida savienojumiem SQL, kuros mēs iegūstam datus no vairākām tabulām, pašsavienošanās darbojas vienā tabulā.



Jums var rasties jautājums, kāpēc man ir nepieciešama pašapvienošanās, ja es varu meklēt datus no pašas tabulas? Lai gan tā var būt taisnība, pašsavienošanās var palīdzēt uzdevumos, kad jāveic rekursīvi datu vaicājumi vai jāatrod hierarhiski dati.



Būtībā pašsavienojumam ir būtiska loma, ja jums ir jāsalīdzina vienas tabulas rindas.





Pievienojieties mums šajā ziņā, kad mēs izpētām, kas ir pašsavienojumi, kā tie darbojas un kā mēs varam tos izmantot SQL tabulā.

PIEZĪME. Pirms niršanas mēs izveidosim pamata tabulu demonstrācijas nolūkos. Tomēr jūs domājat izmantot jebkuru atbalstīto datu kopu.



Datu paraugi

Šie vaicājumi izveido pamata tabulu, kurā ir informācija par produktu, un tabulā ievieto ierakstu paraugus. Tas ļauj mums parādīt, kā strādāt ar pašsavienojumiem SQL.

CREATE TABLE Produkti (
product_id INT PRIMARY KEY,
produkta_nosaukums VARCHAR(255) NOT NULL,
vecāku_id INT
);

Pievienojiet tabulai 10 ierakstu paraugus.

INSERT INTO Produktu (produkta_id, produkta_nosaukums, vecāku_id) VĒRTĪBAS
(1, 'Elektronika', NULL),
(2, 'Viedtālruņi', 1),
(3, 'klēpjdatori', 1),
(4, iPhone 13, 2),
(5, Samsung Galaxy S21, 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Aksesuāri', NULL),
(9, 'Tālruņa futrāļi', 8),
(10, “Klēpjdatoru somas”, 8);

Rezultātā iegūtā tabula ir šāda:

1. piemērs: pamata pašpievienošanās

Sāksim ar vienkāršu pašsavienošanos. Piemēram, mēs varam izmantot vienkāršu pašsavienošanos, lai izgūtu vienas un tās pašas tabulas vecāku un bērnu attiecības.

Piemēram, mēs varam to izmantot, lai atrastu visus produktus un tiem atbilstošos pamatproduktus. Mēs varam izpildīt vaicājumu šādi:

SELECT c.product_name AS bērnu_produkts, p.product_name AS vecāku_produkts
NO Produkti c
LEFT JOIN Products p ON c.parent_id = p.product_id;

Dotajā vaicājuma piemērā mēs izmantojam “c” kā aizstājvārdu produktu tabulai, kas apzīmē pakārtotos produktus.

Mēs arī izveidojam produktu tabulas aizstājvārdu “p”, lai attēlotu galvenos produktus.

Nākamajā darbībā mēs izmantojam pamata SQL LEFT JOIN, lai nodrošinātu augstākā līmeņa produktu iekļaušanu rezultātā.

Visbeidzot, mēs izmantojam klauzulu ON, lai izveidotu attiecības starp pakārtotajiem un vecākierakstiem, izmantojot kolonnas “parent_id” un “product_id”.

Rezultātā iegūtā tabula ir šāda:

Jūs pamanīsit, ka pamatproduktiem nav augšējās saites, jo tie atrodas hierarhijas augšgalā, ko sauc arī par saknes elementiem.

2. piemērs: hierarhisku datu iegūšana

Viena no pašsavienojuma pamatlomām ir hierarhisku datu izguve. Piemēram, pieņemsim, ka mēs vēlamies izgūt visus pakārtotos produktus, ja produkts ir vienāds ar “Aksesuāri”. Mēs varam izpildīt vaicājumu, izmantojot pašsavienošanos šādi:

ATLASĪT c.product_name AS child_product
NO Produkti c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Piederumi';

Šajā gadījumā mēs izmantojam JOIN, lai produktu tabulu apvienotu ar sevi, un pēc tam izmantojam WHERE klauzulu, lai filtrētu vēlamos rezultātus.

Secinājums

Šajā apmācībā mēs izpētījām, kas ir pašsavienošanās, kā tā darbojas un kā mēs varam to izmantot SQL tabulā, lai izgūtu hierarhiskus datus vai veiktu rekursīvus vaicājumus.