Úvod do typov pripojení v SQL
Klauzula na spojenie v SQL slúži na kombináciu riadkov z dvoch alebo viacerých tabuliek. Proces kombinovania riadkov závisí od stĺpca, ktorý sa ich týka. Štyri rôzne typy spojení v SQL sú pomenované ako vnútorné spojenie, ľavé spojenie, pravé spojenie a plné spojenie. Aby sme mohli skutočne začať používať akýkoľvek typ spojenia, potrebujeme RDBMS alebo systém správy relačných databáz, do ktorého načítame údaje. Jedným z veľmi jednoduchých spôsobov, ako porozumieť spojeniam, je použitie Venn diagramu. Pomocou Venn diagramu je možné ľahko odhadnúť všetky možné a logické vzťahy medzi rôznymi súbormi údajov. Pochopme to jeden po druhom pomocou Venn diagramu. Neskôr pochopíme rozdiel medzi nimi pomocou niekoľkých praktických príkladov. Predpokladajme, že v našej databáze sú dva súbory údajov uložené vo forme tabuľky jedna a tabuľky dva. Medzi týmito dvoma tabuľkami existuje určitý vzťah, ktorý je špecifikovaný vo forme primárneho kľúča a konceptu cudzieho kľúča. Ak spojíte dve tabuľky, ktoré majú nejaký vzťah, bude reprezentácia scenára Vennovho diagramu niečo podobné,
Výška tohto prekrývania určí rozsah podobnosti medzi dvoma tabuľkami, tj tabuľkou A a tabuľkou B. To znamená, že počet záznamov z tabuľky 1, ktoré sa zhodujú so záznamami z tabuľky 2, predstavuje časť prekrývania. Toto je jedna podmnožina údajov. Dostávame štyri rôzne typy spojení na základe podmnožiny údajov, ktoré vyberieme z týchto dvoch tabuliek.
Syntax spojenia:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Typy pripojení v SQL
- Vnútorné pripojenie
- Ľavé pripojenie
- Správne pripojenie
- Plné pripojenie
Ďalej uvádzame rôzne typy pripojení podrobne.
1. Vnútorné pripojenie
Pri vnútornom spojení vyberáme iba údaje, ktoré sú bežné v oboch tabuľkách. (tj časť 3 tu) Aby sa to spresnilo, v tomto spojení sa vyberú všetky záznamy z oboch tabuliek, ktoré zodpovedajú stavu uvedenému pri spojení.
Syntax vnútorného spojenia:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Ľavé pripojenie
Pri ľavom spojení vyberieme všetky údaje z ľavej tabuľky az pravej tabuľky vyberieme iba množinu údajov, ktorá zodpovedá stavu uvedenému pri spojení (tu oblasť 1 + 3)
Syntax ľavého spojenia:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Správne pripojenie
Pri správnom spojení vyberieme všetky údaje z pravej tabuľky az ľavej tabuľky vyberieme iba množinu údajov, ktorá zodpovedá stavu uvedenému pri pripojení (tu 3 + 2)
Syntax pravého spojenia:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Úplné pripojenie
Pri úplnom spojení sa všetky záznamy z oboch tabuliek zlúčia a vyberú bez ohľadu na stav uvedený pri splnení alebo nesplnení spojenia. (tu 1 + 2 + 3)
Syntax úplného spojenia:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Príklady spojení v SQL
Zvážte nasledujúcu tabuľku:
1. Príklad ORDER_DETAILS
Objednávka v tabuľke obsahuje podrobnosti o objednávke zadanej zákazníkom, ako je ID objednávky, počet objednaných produktov, výška objednávky, ID zákazníka, ktorý objednávku vydal, a dátum, kedy bola objednávka zadaná. Takýto stôl môže použiť ktorýkoľvek webový server online na uloženie podrobností o objednávke.
Tabuľka ORDER_DETAILS:
Číslo objednávky | No_of_Items | ORDER_AMOUNT | CUSTOMER_ID | Dátum objednávky |
123 | 3 | 5500 | p_1 | 01/20/2019 |
234 | 2 | 6500 | P_12 | 02.10.2019 |
345 | 1 | 10000 | P_13 | 05/27/2019 |
456 | 4 | 4000 | P_14 | 11.07.2019 |
567 | 2 | 20656 | p_1 | 12/15/2019 |
678 | 3 | 15000 | P_11 | 10/27/2019 |
2. Príklad CUSTOMER_DETAILS
Teraz si vezmime ďalšiu tabuľku, v ktorej budú uložené informácie o zákazníkovi, aby sme mohli doručiť objednávku na ich príslušné adresy. Zákaznícka tabuľka bude preto obsahovať údaje o zákazníkovi, ako napríklad ID zákazníka (cust_id), ktoré budú jedinečné pre každého zákazníka. Teraz sa meno a priezvisko uložia do poľa s názvom - Cust_First_Name a Cust_Last_Name. V ostatných poliach sa uložia informácie, ako napríklad e-mailové identifikačné číslo, číslo mobilného telefónu zákazníka spolu s adresou, kódom PIN, mestom a štátom. Takže vidíme, že náš Zákaznícky stôl bude vyzerať asi takto:
Tabuľka CUSTOMER_DETAILS:
Cust_Id | Cust_First_Name | Cust_Last_Name | PIN kód | adresa | Cust_Mobile | veľkomesto | Štát | Cust_email |
P_50 | Alice | Peter | 111111 | Ulica 330 xyz | 123 | Bangalore | KA | |
P_12 | james | Dsouza | 155511 | Kolónia 420 abc | 234 | Hyderabad | AP | |
P_15 | pustošiť | hrnčiar | 123456 | 551 mg cesty | 444 | Noida | Delhi | |
P_40 | Miley | parker | 111121 | 11 stôp cesty | 224 | Bangalore | KA | |
P_10 | Herman | krík | 123423 | 34. ulica thanco | 432 | Delhi | Delhi | |
P_18 | bóje | hnedý | 134523 | 50. nezávislá cesta | 145 | Gurugram | Haryana | |
P_20 | james | Russel | 111111 | 101 mg cesta | 678 | Bangalore | KA | |
p_1 | Miley | Madison | 100011 | 45. usporiadanie kaverappa | 987 | Chennai | TN |
Teraz pomocou tohto príkladu porozumieme funkčnosti pripojení. Vidíme, že vzťah medzi týmito dvoma tabuľkami, tj tabuľkou ORDER_DETAILS a tabuľkou CUSTOMER_DETAILS, je vytvorený kľúčom, ktorý má hodnotu id zákazníka, tj Customer_Id, ktorý je primárnym kľúčom v tabuľke CUSTOMER_DETAILS a cudzím kľúčom v tabuľke ORDER_DETAILS tabuľka.
Predtým, ako budeme pokračovať, je potrebné poznamenať niekoľko dôležitých bodov:
- Nie všetci zákazníci v našej tabuľke CUSTOMER_DETAILS podali žiadosť o objednávku.
- Nie všetky požiadavky na objednávku, ktoré máme v našej tabuľke ORDER_DETAILS, majú customer_id, ktorý sa nachádza v našej tabuľke CUSTOMER_DETAILS, čo znamená, že pre niektoré objednávky nie sú žiadne podrobnosti o zákazníkovi.
3. Vnútorné pripojenie
Vnútorné pripojenie vám poskytne iba tie záznamy, pre ktoré je splnená podmienka.
Dopyt:
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ýkon:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Dátum objednávky |
Miley | 3 | 5500 | 01/20/2019 | |
james | 2 | 6500 | 02.10.2019 | |
Miley | 2 | 20656 | 12/15/2019 |
4. Ľavé pripojenie
Ľavé pripojenie vám poskytne všetky záznamy z ľavej tabuľky, tj tabuľku CUSTOMER_DETAILS. Ak zákazník neurobí žiadne objednávky, vráti nulovú hodnotu pre stĺpce v tabuľke ORDER_DETAILS.
Dopyt:
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ýkon:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Dátum objednávky |
Alice | NULOVÝ | NULOVÝ | NULOVÝ | |
james | 2 | 6500 | 02.10.2019 | |
pustošiť | NULOVÝ | NULOVÝ | NULOVÝ | |
Miley | NULOVÝ | NULOVÝ | NULOVÝ | |
Herman | NULOVÝ | NULOVÝ | NULOVÝ | |
bóje | NULOVÝ | NULOVÝ | NULOVÝ | |
james | NULOVÝ | NULOVÝ | NULOVÝ | |
Miley | 3 | 5500 | 01/20/2019 | |
Miley | 2 | 20656 | 12/15/2019 |
5. Správne pripojenie
Správne, pripojenie vám poskytne všetky záznamy zo správnej tabuľky, tj z tabuľky ORDER_DETAILS. Ak pre objednávku nie sú nájdené žiadne záznamy zákazníkov, vráti nulovú hodnotu pre stĺpce v tabuľke CUSTOMER_DETAILS.
Dopyt:
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ýkon:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Dátum objednávky |
Miley | 3 | 5500 | 01/20/2019 | |
james | 2 | 6500 | 02.10.2019 | |
NULOVÝ | NULOVÝ | 1 | 10000 | 05/27/2019 |
NULOVÝ | NULOVÝ | 4 | 4000 | 11.07.2019 |
Miley | 2 | 20656 | 12/15/2019 | |
NULOVÝ | NULOVÝ | 3 | 15000 | 10/27/2019 |
6. Úplné pripojenie
Úplné pripojenie vám poskytne všetky záznamy uvedené v oboch tabuľkách.
Dopyt:
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ýkon:
Cust_First_Name | Cust_email | No_of_Items | ORDER_AMOUNT | Dátum objednávky |
Alice | NULOVÝ | NULOVÝ | NULOVÝ | |
james | 2 | 6500 | 02.10.2019 | |
pustošiť | NULOVÝ | NULOVÝ | NULOVÝ | |
Miley | NULOVÝ | NULOVÝ | NULOVÝ | |
Herman | NULOVÝ | NULOVÝ | NULOVÝ | |
bóje | NULOVÝ | NULOVÝ | NULOVÝ | |
james | NULOVÝ | NULOVÝ | NULOVÝ | |
Miley | 3 | 5500 | 01/20/2019 | |
Miley | 2 | 20656 | 12/15/2019 | |
NULOVÝ | NULOVÝ | 1 | 10000 | 05/27/2019 |
NULOVÝ | NULOVÝ | 4 | 4000 | 11.07.2019 |
NULOVÝ | NULOVÝ | 3 | 15000 | 10/27/2019 |
Výhody pripojenia v SQL
- Rýchlejšie vykonanie, čo znamená rýchlejšie načítanie požadovaných stĺpcov.
- Optimalizované, čitateľné a pochopiteľné
- Zvýšenie výkonu.
záver
Ako vidno, používame JOIN na pripojenie a získanie polí z rôznych tabuliek.
- Vnútorné spojenie vyvolá záznamy, kde je daná podmienka splnená.
- Ľavé spojenie vám poskytne všetky riadky z ľavej tabuľky, aj keď daná podmienka nezodpovedá.
- Right Join vám poskytne všetky riadky z ľavej tabuľky, aj keď daná podmienka nezodpovedá.
- Úplné spojenie vráti všetky riadky, keď existuje zhoda v jednej z tabuliek.
- Pripojiť dotazy môžu byť použité s príkazmi ako - SELECT, INSERT, UPDATE, DELETE.
- Členovia sa tiež stotožňujú s rôznymi klauzulami ako - SKUPINA PODĽA, PODOBNÉ OTÁZKY, KDE, AGREGÁTOVÉ FUNKCIE atď.
Odporúčaný článok
Toto bol sprievodca Typy pripojení v SQL. Tu diskutujeme rôzne typy spojení v SQL a jeho výhody spolu s príkladmi. Viac informácií nájdete aj v ďalších navrhovaných článkoch -
- Výhody NoSQL
- SQL Management Tools
- Databáza v SQL
- Zástupný znak v SQL
- Top 6 typov spojení v MySQL s príkladmi