SQL Self-Join

Sql Self Join



Ang isa sa pinakakilalang tampok ng relational database ay ang pagsali. Ang mga pagsali ay isa sa pinakamakapangyarihan at kumplikadong mga tampok ng relational database. Pinapayagan nila ang malawak na modularity at napaka-komplikadong relasyon sa pagitan ng mga talahanayan ng database nang hindi nakompromiso ang pagganap.

Gayunpaman, mayroong isang uri ng pagsali sa SQL na may posibilidad na pumunta sa ilalim ng radar na kilala bilang isang self-join.

Sa SQL, ang self-join ay isang mahusay na pamamaraan na nagbibigay-daan sa amin na pagsamahin ang mga row mula sa parehong talahanayan batay sa isang nauugnay na column sa loob ng parehong talahanayan.







Hindi tulad ng iba pang uri ng pagsali sa SQL kung saan kinukuha namin ang data mula sa maraming talahanayan, gumagana ang isang self-join sa isang table.



Maaari kang magtaka, bakit kailangan ko ng self-join kapag maaari kong hanapin ang data mula sa talahanayan mismo? Bagama't maaaring totoo iyon, makakatulong ang self-join sa mga gawain kapag kailangan mong magsagawa ng mga recursive data query o maghanap ng hierarchical data.



Sa pangkalahatan, ang self-join ay gumaganap ng isang pangunahing papel kung saan kailangan mong paghambingin ang mga row ng parehong talahanayan.





Samahan kami sa post na ito habang tinutuklasan namin kung ano ang mga self-join, kung paano gumagana ang mga ito, at kung paano namin magagamit ang mga ito sa isang talahanayan ng SQL.

TANDAAN: Bago tayo sumisid, magse-set up tayo ng pangunahing talahanayan para sa mga layunin ng pagpapakita. Gayunpaman, pakiramdam mo ay gumamit ka ng anumang sinusuportahang dataset.



Sample na data

Ang mga sumusunod na query ay lumilikha ng isang pangunahing talahanayan na naglalaman ng impormasyon ng produkto at inilalagay ang mga sample na tala sa talahanayan. Nagbibigay-daan ito sa amin na ipakita kung paano magtrabaho kasama ang mga self-join sa SQL.

GUMAWA NG MGA Produkto ng TABLE (
product_id INT PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
parent_id INT
);

Magdagdag ng 10 sample na tala sa talahanayan.

INSERT INTO Products (product_id, product_name, parent_id) VALUES
(1, 'Electronics', NULL),
(2, 'Mga Smartphone', 1),
(3, 'Laptop', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Mga Accessory', NULL),
(9, 'Mga Case ng Telepono', 8),
(10, 'Laptop Bags', 8);

Ang resultang talahanayan ay ang mga sumusunod:

Halimbawa 1: Basic Self-Join

Magsimula tayo sa isang pangunahing pagsali sa sarili. Halimbawa, maaari tayong gumamit ng simpleng self-join para makuha ang relasyon ng magulang-anak ng parehong talahanayan.

Halimbawa, maaari naming gamitin ito upang mahanap ang lahat ng mga produkto at ang kanilang mga kaukulang produkto ng magulang. Maaari kaming magpatakbo ng isang query tulad ng sumusunod:

SELECT c.product_name BILANG child_product, p.product_name BILANG parent_product
MULA sa mga Produkto c
KALIWA SUMALI Mga Produkto p NAKA-ON c.parent_id = p.product_id;

Sa ibinigay na halimbawang query, ginagamit namin ang 'c' bilang isang alias para sa talahanayan ng produkto na kumakatawan sa mga produktong pambata.

Gumagawa din kami ng 'p' alias para sa talahanayan ng produkto upang kumatawan sa mga pangunahing produkto.

Sa susunod na hakbang, gumagamit kami ng pangunahing SQL LEFT JOIN upang matiyak na ang mga nangungunang antas ng produkto ay kasama sa resulta.

Panghuli, ginagamit namin ang ON clause para gumawa ng ugnayan sa pagitan ng mga talaan ng bata at magulang gamit ang mga column na 'parent_id' at 'product_id.'

Ang resultang talahanayan ay ang mga sumusunod:

Mapapansin mo na ang mga pangunahing produkto ay walang nangungunang link dahil sila ay nasa tuktok ng hierarchy na kilala rin bilang mga elemento ng ugat.

Halimbawa 2: Kumuha ng Hierarchical Data

Isa sa mga pinakapangunahing tungkulin ng isang self-join ay ang pagkuha ng hierarchical data. Halimbawa, ipagpalagay na gusto naming kunin ang lahat ng produktong pambata kung saan ang produkto ay katumbas ng 'Mga Accessory.' Maaari naming patakbuhin ang query gamit ang isang self-join gaya ng sumusunod:

PUMILI c.product_name BILANG child_product
MULA sa mga Produkto c
SUMALI sa Mga Produkto p ON c.parent_id = p.product_id
WHERE p.product_name = 'Mga Accessory';

Sa kasong ito, gumagamit kami ng JOIN upang pagsamahin ang talahanayan ng mga produkto sa sarili nito at pagkatapos ay gamitin ang sugnay na WHERE upang i-filter ang mga resulta na gusto namin.

Konklusyon

Sa tutorial na ito, ginalugad namin kung ano ang self-join, kung paano ito gumagana, at kung paano namin ito magagamit sa SQL table para kumuha ng hierarchical data o magsagawa ng mga recursive na query.