SQL-i liitumistüüpide sissejuhatus

SQL-i liitumisklausel on eesmärk kahe või enama tabeli ridade ühendamiseks. Ridade ühendamise protsess sõltub veerust, mis on nendega seotud. SQL-i nelja erinevat tüüpi liitumisi nimetatakse sisemiseks liitumiseks, vasakpoolseks liitumiseks, paremaks liitumiseks ja täielikuks liitumiseks. Enne kui saame hakata kasutama igat tüüpi liitumist, vajame RDBMS-i või relatsiooniandmebaasi haldussüsteemi, kuhu andmed laadime. Üks väga lihtsaid viise liitumiste mõistmiseks on Venni diagrammi kasutamine. Venni diagrammi kasutamine võimaldab hõlpsalt hinnata kõiki võimalikke ja loogilisi seoseid erinevate andmekogumite vahel. Mõistagem seda ükshaaval, kasutades Venni diagrammi. Hiljem mõistame nende erinevust mõne praktilise näite abil. Oletagem, et meie andmebaasis on kaks andmekogumit, mis on salvestatud tabeli esimese ja tabeli kujul. Kahe tabeli vahel on teatud seos, mis täpsustatakse primaarvõtme ja võõra võtme kontseptsiooni kujul. Kui liitute kahe tabeliga, millel on mingisugused seosed, saab stsenaariumi Venni diagrammi kujundus midagi sellist,

Selle kattumise suurus määrab kahe tabeli, st tabeli A ja tabeli B sarnasuse ulatuse. See tähendab, et tabeli 1 kirjete arv, mis sobib tabeli 2 kirjetega, on tähistatud kattuvuse jaotisega. See on üks andmete alamhulk. Kahest tabelist valitud andmete alamhulga põhjal saame neli erinevat tüüpi liitumist.

Liitumise süntaks:

SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition

Liitumiste tüübid SQL-is

  1. Sisemine liitumine
  2. Vasak liituma
  3. Parempoolne liitumine
  4. Täielik liitumine

Allpool selgitame üksikasjalikke erinevat tüüpi liitumisi.

1. Sisemine liitumine

Siseühenduses valime ainult need andmed, mis on ühised mõlemas tabelis. (st 3. osa siin) Täpsuse huvides on selles liitumises valitud mõlemad kirjed mõlemast tabelist, mis vastavad liitumisega mainitud tingimusele.

Sisemise liitumise süntaks:

SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition

2. Vasak liitumine

Vasakpoolse liitumise korral valime vasakult tabelilt kõik andmed ja paremast tabelist ainult selle andmekogumi, mis vastab liitumisega mainitud tingimusele (siin ala 1 + 3)

Vasakpoolse süntaks:

SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

3. Parempoolne liitumine

Parempoolses liitumises valime paremast tabelist kõik andmed ja vasakpoolsest tabelist valige ainult andmekogum, mis vastab liitumisega mainitud tingimusele (siin 3 + 2)

Parempoolse liitmise süntaks:

SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition

4. Täielik liitumine

Täieliku liitmise korral liidetakse ja valitakse kõik tabeli moodustavad kirjed sõltumata sellest, millist tingimust mainitakse, kas liitumine on täidetud või mitte. (siin 1 + 2 + 3)

Täieliku liitumise süntaks:

SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition

SQL-i liitumiste näited

Vaatleme kahte allpool toodud tabelit:

1. ORDER_DETAILSi näide

Tabelitellimus sisaldab üksikasju kliendi esitatud tellimuse kohta, näiteks tellimuse ID, tellitud toodete arvu, tellimuse summa, tellimuse teinud kliendi id ja tellimuse esitamise kuupäeva. Sellist lauda saab tellimuse üksikasjade hoidmiseks kasutada iga veebipõhine veebisait.

ORDER_DETAILS tabel:

Tellimuse ID Elementide nr Tellimus_kogus Kliendi ID Telli_kuupäev
123 3 5500 P_1 01.01.2019
234 2 6500 P_12 02/10/2019
345 1 10000 P_13 27.05.2019
456 4 4000 P_14 11/07/2019
567 2 20656 P_1 15.12.2019
678 3 15000 P_11 27.10.2019

2. CUSTOMER_DETAILS näide

Nüüd võtame veel ühe tabeli, kuhu kliendi andmed salvestatakse, et saaksime tellimuse edastada vastavatele aadressidele. Klienditabelis on seega kliendi andmed, näiteks kliendi ID (cust_id), mis on iga kliendi jaoks ainulaadne. Nüüd on ees- ja perekonnanimi salvestatud väljale nimega - Cust_First_Name ja Cust_Last_Name. Teistele väljadele salvestatakse teave, näiteks e-posti aadress, kliendi mobiilinumber koos aadressiga, PIN-kood, linn ja osariik. Seega näeme, et meie klientide tabel näeb välja midagi sellist -

CUSTOMER_DETAILS tabel:

Kliendi ID Cust_First_Name Kliendi_viimati_nimi PIN-koodi Aadress Cust_Mobile Linn Osariik Klientide_post
P_50 Alice Peeter 111111 330 xyz tänav 123 Bangalore KA
P_12 James Dsouza 155511 420 abc koloonia 234 Hyderabad AP
P_15 Harry Pottsepp 123456 551 mg teed 444 Noida Delhi
P_40 Miley Parker 111121 11 jalga tee 224 Bangalore KA
P_10 Herman Bush 123423 34 th thanco tänav 432 Delhi Delhi
P_18 Dan Pruun 134523 50. iseseisev tee 145 Gurugram Harjaana
P_20 James Russel 111111 101 mg teed 678 Bangalore KA
P_1 Miley Madison 100011 45. kaverappa paigutus 987 Chennai TN

Kasutagem nüüd seda näidet, saagem aru liitumiste funktsionaalsusest. Näeme, et kahe tabeli, st tabeli ORDER_DETAILS ja tabeli CUSTOMER_DETAILS vaheline seos luuakse võtmega, millel on kliendi id väärtus, st klient_Id, mis on tabelis CUSTOMER_DETAILS esmane võti, ja võõrvõti tabelis ORDER_DETAILS tabel.

Enne jätkamist on siin mõned olulised märkused:

  • Mitte kõik kliendid tabelis CUSTOMER_DETAILS pole tellimustaotlust esitanud.
  • Kõigil tellimustaotlustel, mis meie tabelis ORDER_DETAILS on, pole kliendi ID, mis on meie tabelis CUSTOMER_DETAILS, mis tähendab, et mõne tellimuse puhul pole kliendi kohta üksikasju.

3. Sisemine liitumine

Sisemine liitumine annab teile ainult need kirjed, mille tingimus on täidetud.

Päring:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
inner join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Väljund:

Cust_First_Name Klientide_post Elementide nr Tellimus_kogus Telli_kuupäev
Miley 3 5500 01.01.2019
James 2 6500 02/10/2019
Miley 2 20656 15.12.2019

4. Vasakpoolne liitumine

Vasakpoolne liitumine annab teile kõik vasakpoolsest tabelist pärinevad kirjed, st CUSTOMER_DETAILS tabel. Kui klient ei ole tellimusi esitanud, tagastab ta tabeli ORDER_DETAILS veergude jaoks nullväärtuse.

Päring:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
left join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Väljund:

Cust_First_Name Klientide_post Elementide nr Tellimus_kogus Telli_kuupäev
Alice NULL NULL NULL
James 2 6500 02/10/2019
Harry NULL NULL NULL
Miley NULL NULL NULL
Herman NULL NULL NULL
Dan NULL NULL NULL
James NULL NULL NULL
Miley 3 5500 01.01.2019
Miley 2 20656 15.12.2019

5. Parempoolne liitumine

Õige, Liituge, saate kõik kirjed parempoolsest tabelist, st tabelist ORDER_DETAILS. Kui tellimuse jaoks pole kliendikirjeid leitud, tagastab see tabeli CUSTOMER_DETAILS veergude jaoks nullväärtuse.

Päring:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
right join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Väljund:

Cust_First_Name Klientide_post Elementide nr Tellimus_kogus Telli_kuupäev
Miley 3 5500 01.01.2019
James 2 6500 02/10/2019
NULL NULL 1 10000 27.05.2019
NULL NULL 4 4000 11/07/2019
Miley 2 20656 15.12.2019
NULL NULL 3 15000 27.10.2019

6. Täielik liitumine

Täielik liitumine annab teile kõik mõlemast tabelist täpsustatud kirjed.

Päring:

select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
full join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id

Väljund:

Cust_First_Name Klientide_post Elementide nr Tellimus_kogus Telli_kuupäev
Alice NULL NULL NULL
James 2 6500 02/10/2019
Harry NULL NULL NULL
Miley NULL NULL NULL
Herman NULL NULL NULL
Dan NULL NULL NULL
James NULL NULL NULL
Miley 3 5500 01.01.2019
Miley 2 20656 15.12.2019
NULL NULL 1 10000 27.05.2019
NULL NULL 4 4000 11/07/2019
NULL NULL 3 15000 27.10.2019

Liitumiste eelised SQL-is

  1. Kiirem täitmine, mis tähendab soovitud veergude kiiremat allalaadimist.
  2. Optimeeritud, loetav ja arusaadav
  3. Jõudluse suurenemine.

Järeldus

Nagu näha, kasutame erinevate tabelite väljade lisamiseks ja hankimiseks JOIN-e.

  • Inner Join tõmbab kirjed, kus antud tingimus on täidetud.
  • Vasakpoolne liitumine annab teile kõik vasakpoolsest tabelist olevad read, isegi kui antud tingimus ei vasta.
  • Parempoolne liitumine annab teile kõik vasakpoolsest lauast pärit read, isegi kui antud tingimus ei vasta.
  • Täielik liitumine tagastab kõik read, kui ühes tabelis on vaste.
  • Liitumispäringuid saab kasutada selliste käskudega nagu - SELECT, INSERT, UPDATE, DELETE.
  • Liitumised saavad läbi ka erinevate klauslitega, näiteks - GROUP BY, SUB QUERIES, WHERE, AGREGATE FUNKTSIOONID jne.

Soovitatav artikkel

See on SQL-i liitumistüüpide juhend. Siin käsitleme SQL-i eri tüüpi liitumisi ja selle eeliseid koos näidetega. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. NoSQL eelised
  2. SQL-i haldustööriistad
  3. Andmebaas SQL-is
  4. Metamärk SQL-is
  5. MySQL-i 6 parimat liitumistüüpi koos näidetega