SQL Self-Join

Sql Self Join



Yksi relaatiotietokantojen tunnetuimmista ominaisuuksista on liitokset. Liitokset ovat yksi relaatiotietokantojen tehokkaimmista ja monimutkaisimmista ominaisuuksista. Ne mahdollistavat laajan modulaarisuuden ja erittäin monimutkaiset suhteet tietokantataulukoiden välillä suorituskyvystä tinkimättä.

SQL:ssä on kuitenkin eräänlainen liitos, joka yleensä jää tutkan alle ja joka tunnetaan itseliitoksena.

SQL:ssä itseliitos on tehokas tekniikka, jonka avulla voimme yhdistää saman taulukon rivit saman taulukon saman sarakkeen perusteella.







Toisin kuin muut SQL:n liitokset, joissa otamme tiedot useista taulukoista, itseliitos toimii yhdessä taulukossa.



Saatat ihmetellä, miksi tarvitsen itseliitoksen, kun voin etsiä tiedot itse taulukosta? Vaikka tämä saattaa olla totta, itseliittäminen voi auttaa tehtävissä, kun sinun on suoritettava rekursiivisia tietokyselyjä tai löydettävä hierarkkinen data.



Pohjimmiltaan itseliitoksilla on keskeinen rooli, kun sinun on verrattava saman taulukon rivejä.





Liity tähän viestiin, kun tutkimme, mitä itseliitokset ovat, miten ne toimivat ja kuinka voimme käyttää niitä SQL-taulukossa.

HUOMAA: Ennen kuin sukellamme, asetamme peruspöydän esittelytarkoituksiin. Voit kuitenkin käyttää mitä tahansa tuettua tietojoukkoa.



Esimerkkitiedot

Seuraavat kyselyt luovat perustaulukon, joka sisältää tuotetiedot, ja lisäävät mallitietueet taulukkoon. Tämä antaa meille mahdollisuuden osoittaa, kuinka työskennellä itseliitosten kanssa SQL:ssä.

CREATE TABLE Tuotteet (
product_id INT PRIMARY KEY,
tuotteen_nimi VARCHAR(255) NOT NULL,
vanhempi_tunnus INT
);

Lisää taulukkoon 10 näytetietuetta.

INSERT INTO Tuotteet (tuotetunnus, tuotteen_nimi, vanhempi_tunnus) ARVOT
(1, 'Elektroniikka', NULL),
(2, 'älypuhelimet', 1),
(3, 'kannettavat tietokoneet', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'Dell XPS 15', 3),
(8, 'Lisävarusteet', NULL),
(9, 'Puhelinkotelot', 8),
(10, 'Kannettavien laukut', 8);

Tuloksena oleva taulukko on seuraava:

Esimerkki 1: Perus-itseliittyminen

Aloitetaan perustason itseliittymisestä. Voimme esimerkiksi käyttää yksinkertaista itseliittämistä hakeaksemme saman taulukon ylä-lapsi-suhteen.

Sen avulla voimme esimerkiksi etsiä kaikki tuotteet ja niitä vastaavat emotuotteet. Voimme suorittaa kyselyn seuraavasti:

VALITSE c.tuotteen_nimi AS lapsituote, p.tuotteen_nimi AS vanhempi_tuote
FROM Tuotteet c
LEFT JOIN Tuotteet p ON c.parent_id = p.product_id;

Annetussa esimerkkikyselyssä käytämme 'c' aliaksena tuotetaulukolle, joka edustaa alituotteita.

Luomme myös tuotetaulukolle p-aliaksen edustamaan päätuotteita.

Seuraavassa vaiheessa käytämme perus-SQL LEFT JOIN -toimintoa varmistaaksemme, että huipputason tuotteet sisällytetään tulokseen.

Lopuksi käytämme ON-lausetta luodaksemme suhteen ali- ja ylätason tietueiden välille käyttämällä 'parent_id'- ja 'product_id'-sarakkeita.

Tuloksena oleva taulukko on seuraava:

Huomaat, että päätuotteilla ei ole ylälinkkiä, koska ne ovat hierarkian huipulla, joita kutsutaan myös juurielementeiksi.

Esimerkki 2: Hae hierarkkiset tiedot

Yksi itseliitoksen tärkeimmistä tehtävistä on hierarkkisten tietojen hakeminen. Oletetaan esimerkiksi, että haluamme hakea kaikki alatason tuotteet, joissa tuote on sama kuin 'Lisävarusteet'. Voimme suorittaa kyselyn itseliitoksen avulla seuraavasti:

SELECT c.product_name AS lapsituote
FROM Tuotteet c
JOIN Products p ON c.parent_id = p.product_id
WHERE p.product_name = 'Lisävarusteet';

Tässä tapauksessa käytämme JOIN-komentoa tuotteiden taulukon yhdistämiseen itsensä kanssa ja käytämme sitten WHERE-lausetta suodattamaan haluamamme tulokset.

Johtopäätös

Tässä opetusohjelmassa tutkimme, mitä itseliitos on, miten se toimii ja kuinka voimme käyttää sitä SQL-taulukossa hierarkkisten tietojen hakemiseen tai rekursiivisten kyselyjen suorittamiseen.