Uvod v vrste združitev v SQL
Klavzula Pridruži se v SQL služi namenu združevanja vrstic iz dveh ali več tabel. Postopek združevanja vrstic je odvisen od stolpca, ki je povezan z njimi. Štiri različne vrste združitev v SQL so poimenovane kot notranji, levi, desni in polni. Preden lahko začnemo uporabljati katero koli vrsto pridruževanja, potrebujemo RDBMS ali sistem za upravljanje relacijskih podatkovnih baz, kamor bomo naložili podatke. Eden zelo preprostih načinov za razumevanje povezav je uporaba Vennovega diagrama. Uporaba Vennovega diagrama omogoča enostavno merjenje vseh možnih in logičnih razmerij med različnimi nabori podatkov. Naj to razumemo s pomočjo Vennovega diagrama. Kasneje bomo razliko med temi razumeli z uporabo nekaterih praktičnih primerov. Predpostavimo, da sta v naši podatkovni bazi dva nabora podatkov, shranjena v obliki preglednice ena in druga tabela. Med obema tabelama obstaja nekaj povezave, ki je določena v obliki primarnega in koncepta tujega ključa. Če se pridružite dvema tabelama, ki imata nekakšen odnos, bo Vennov diagram predstavil scenarij,
Znesek tega prekrivanja bo določil obseg podobnosti med dvema tabelama, torej tabelo A in tabelo B. To pomeni, da je število zapisov iz tabele ena, ki se ujemajo z zapisi iz druge tabele, predstavljeno s prekrivanjem. To je ena podskupina podatkov. Na podlagi podskupine podatkov, ki jih zbiramo iz obeh tabel, dobimo štiri različne vrste združevanj.
Sintaksa pridruživanja:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Vrste združitev v SQL
- Notranji Pridružite se
- Leva združitev
- Pravica Pridružite se
- Popolna Pridružitev
Spodaj podrobno razlagamo različne vrste pridružitev.
1. Notranja združitev
V notranji povezavi izberemo le podatke, ki so skupni v obeh tabelah. (tj. 3. del tukaj) Da bi bilo bolj natančno, so vsi zapisi iz obeh tabel, ki se ujemajo s pogojem, omenjenim s pridruževanjem, izbrani v tej povezavi.
Sintaksa notranje povezave:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Levo Pridružite se
V levi povezavi izberemo vse podatke iz leve tabele in iz desne tabele izberemo samo nabor podatkov, ki se ujema s pogojem, omenjenim s pridružitvijo (tukaj območje 1 + 3)
Sintaksa leve pridruži:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Desno se pridruži
V desni povezavi izberemo vse podatke iz desne tabele, iz leve tabele pa samo nabor podatkov, ki se ujema s pogojem, omenjenim s pridružitvijo (tukaj 3 + 2)
Sintaksa desne povezave:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Polna Pridružitev
V celoti se vsi zapisi tvorijo tako, da sta tabeli združeni in izbrani, ne glede na pogoj, omenjen, če je združitev izpolnjena ali ne. (tukaj 1 + 2 + 3)
Sintaksa polnega pridruževanja:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Primeri združitev v SQL
Upoštevajte dve spodnji tabeli:
1. Primer ORDER_DETAILS
Naročilo v tabeli vsebuje podrobnosti naročila, ki ga je dal naročnik, kot so ID naročila, število naročenih izdelkov, znesek naročila, ID stranke, ki je naročilo oddala, in datum, ko je bilo naročilo oddano. Takšno tabelo lahko uporabi katero koli spletno mesto za shranjevanje podrobnosti naročila.
ORDER_DETAILS Tabela:
Številka naročila | No_of_Items | Naročilo_Stev | Identifikacijska številka stranke | Datum naročila |
123 | 3 | 5500 | P_1 | 20.01.2019 |
234 | 2 | 6500 | P_12 | 10.2.2019 |
345 | 1 | 10000 | P_13 | 27.05.2019 |
456 | 4 | 4000 | P_14 | 7.7.2019 |
567 | 2 | 20656 | P_1 | 15.12.2019 |
678 | 3 | 15000 | P_11 | 27.10.2019 |
2. Primer CUSTOMER_DETAILS
Zdaj vzemimo še eno tabelo, v kateri bodo shranjeni podatki o stranki, da bomo lahko oddali naročilo na ustrezne naslove. Tabela kupcev bo zato vsebovala podatke o stranki, kot je ID stranke (cust_id), ki bo edinstven za vsako stranko. Zdaj sta ime in priimek shranjena v polju, imenovanem - Cust_First_Name in Cust_Last_Name. V ostala polja bodo shranjeni podatki, kot so e-poštni naslov, mobilna številka stranke, skupaj z naslovom, kodo PIN, mestom in državo. Tako lahko vidimo, da bo naša tabela kupcev videti nekako tako -
CUSTOMER_DETAILS Tabela:
Skrbništvo_d | Cust_First_Name | Cust_Last_Name | PIN koda | Naslov | Cust_Mobile | Mesto | Država | Skrbniška pošta |
P_50 | Alice | Peter | 111111 | 330 xyz ulica | 123 | Bangalore | KA | |
P_12 | James | Dsouza | 155511 | Kolonija 420 abc | 234 | Hyderabad | AP | |
P_15 | Harry | Lončar | 123456 | 551 mg ceste | 444 | Noida | Delhi | |
P_40 | Miley | Parker | 111121 | 11 čevljev ceste | 224 | Bangalore | KA | |
P_10 | Herman | Bush | 123423 | 34. ulica ulice | 432 | Delhi | Delhi | |
P_18 | Dan | rjav | 134523 | 50. samostojna cesta | 145 | Gurugram | Haryana | |
P_20 | James | Russel | 111111 | 101 mg ceste | 678 | Bangalore | KA | |
P_1 | Miley | Madison | 100011 | 45. postavitev kaverappa | 987 | Chennai | TN |
Zdaj uporabimo ta primer, da razumemo funkcionalnost združitev. Vidimo, da je razmerje med dvema tabelama, tj. Tabelo ORDER_DETAILS in tabelo CUSTOMER_DETAILS, vzpostavljeno s ključem, ki ima vrednost ID-ja stranke, tj. Customer_Id, ki je primarni ključ v tabeli CUSTOMER_DETAILS in tuji ključ v ORDER_DETAILS tabela.
Preden nadaljujemo, je treba opozoriti na nekaj pomembnih točk:
- Niso vse stranke v naši tabeli CUSTOMER_DETAILS postavile zahtevo za naročilo.
- V vseh zahtevah za naročilo, ki jih imamo v naši tabeli ORDER_DETAILS, se nahaja customer_id, ki je prisoten v naši tabeli CUSTOMER_DETAILS, kar pomeni, da za nekatera naročila ni podrobnosti o stranki.
3. Notranja pridružitev
Inner Join vam bo dal samo tiste zapise, za katere je pogoj izpolnjen.
Poizvedba:
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
Izhod:
Cust_First_Name | Skrbniška pošta | No_of_Items | Naročilo_Stev | Datum naročila |
Miley | 3 | 5500 | 20.01.2019 | |
James | 2 | 6500 | 10.2.2019 | |
Miley | 2 | 20656 | 15.12.2019 |
4. Levo Pridružite se
Leva pridružitev vam bo dala vse zapise iz leve tabele, tj. Tabele CUSTOMER_DETAILS. Če naročnik ni naročil, bo vrnil ničelno vrednost za stolpce v tabeli ORDER_DETAILS.
Poizvedba:
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
Izhod:
Cust_First_Name | Skrbniška pošta | No_of_Items | Naročilo_Stev | Datum naročila |
Alice | NIČ | NIČ | NIČ | |
James | 2 | 6500 | 10.2.2019 | |
Harry | NIČ | NIČ | NIČ | |
Miley | NIČ | NIČ | NIČ | |
Herman | NIČ | NIČ | NIČ | |
Dan | NIČ | NIČ | NIČ | |
James | NIČ | NIČ | NIČ | |
Miley | 3 | 5500 | 20.01.2019 | |
Miley | 2 | 20656 | 15.12.2019 |
5. Desno se pridružite
Pravica, Pridružitev vam bo dala vse zapise iz desne tabele, tj. Tabele ORDER_DETAILS. Če za naročilo ni najti nobene evidence strank, bo vrnil ničelno vrednost za stolpce v tabeli CUSTOMER_DETAILS.
Poizvedba:
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
Izhod:
Cust_First_Name | Skrbniška pošta | No_of_Items | Naročilo_Stev | Datum naročila |
Miley | 3 | 5500 | 20.01.2019 | |
James | 2 | 6500 | 10.2.2019 | |
NIČ | NIČ | 1 | 10000 | 27.05.2019 |
NIČ | NIČ | 4 | 4000 | 7.7.2019 |
Miley | 2 | 20656 | 15.12.2019 | |
NIČ | NIČ | 3 | 15000 | 27.10.2019 |
6. Polna Pridružitev
Full Join vam bo dal vse zapise, podane iz obeh tabel.
Poizvedba:
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
Izhod:
Cust_First_Name | Skrbniška pošta | No_of_Items | Naročilo_Stev | Datum naročila |
Alice | NIČ | NIČ | NIČ | |
James | 2 | 6500 | 10.2.2019 | |
Harry | NIČ | NIČ | NIČ | |
Miley | NIČ | NIČ | NIČ | |
Herman | NIČ | NIČ | NIČ | |
Dan | NIČ | NIČ | NIČ | |
James | NIČ | NIČ | NIČ | |
Miley | 3 | 5500 | 20.01.2019 | |
Miley | 2 | 20656 | 15.12.2019 | |
NIČ | NIČ | 1 | 10000 | 27.05.2019 |
NIČ | NIČ | 4 | 4000 | 7.7.2019 |
NIČ | NIČ | 3 | 15000 | 27.10.2019 |
Prednosti združitev v SQL
- Hitrejša izvedba, kar pomeni hitrejše iskanje želenih stolpcev.
- Optimiziran, berljiv in razumljiv
- Povečanje zmogljivosti.
Zaključek
Kot je razvidno, uporabljamo JOINs, da polja iz različnih tabel pripnemo in dobimo.
- Inner Join pridobiva zapise, kjer je izpolnjen dani pogoj.
- Leva povezava vam bo dala vse vrstice iz leve tabele, tudi če se navedeni pogoj ne ujema.
- Right Join vam bo dal vse vrstice iz leve tabele, tudi če se navedeni pogoj ne ujema.
- Full Join vrne vse vrstice, če se v eni od tabel ujema ujemanje.
- Poizvedbe za združevanje lahko uporabljate z ukazi, kot so - IZBERI, Vstavi, UPDATE, DELETE.
- Pridruži se tudi skupaj z različnimi klavzulami, kot so - GROUP BY, SUB QUERIES, WHERE, AGREGATE FUNCTIONS itd.
Priporočeni članek
To je vodnik za Vrste združitev v SQL. Tukaj obravnavamo različne vrste združitev v SQL in njegove prednosti skupaj s primeri. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -
- Prednosti NoSQL
- Orodja za upravljanje SQL
- Baza podatkov v SQL
- Nadomestni znak v SQL
- Prvih 6 vrst združitev v MySQL s primeri