Úvod do typů spojení v SQL
Klauzule Join v SQL slouží k kombinování řádků ze dvou nebo více tabulek. Proces kombinování řádků závisí na sloupci, který je s nimi spojen. Čtyři různé typy spojení v SQL jsou pojmenovány jako vnitřní spoj, levý spoj, pravý spoj a plný spoj. Než budeme moci skutečně začít používat jakýkoli typ spojení, potřebujeme RDBMS nebo systém správy relačních databází, kde načteme data. Jedním z velmi snadných způsobů, jak porozumět spojení, je použití Vennova diagramu. Použití Venn diagramu usnadňuje měření všech možných a logických vztahů mezi různými sadami dat. Pochopme to jeden po druhém pomocí Venn diagramu. Později pochopíme rozdíl mezi nimi pomocí několika praktických příkladů. Předpokládejme, že v naší databázi jsou uloženy dva soubory dat ve formě tabulky jedna a tabulky dvě. Mezi oběma tabulkami existuje určitý vztah, který je určen ve formě primárního klíče a konceptu cizího klíče. Pokud se spojíte se dvěma tabulkami, které mají nějaký vztah, bude reprezentace scénáře Vennova diagramu něco podobného,
Velikost tohoto překrytí bude určovat rozsah podobnosti mezi oběma tabulkami, tj. Tabulkou A a tabulkou B. To znamená, že počet záznamů z tabulky jedna, které se shodují se záznamy z tabulky dvě, je reprezentován částí překrytí. Toto je jedna podmnožina dat. Dostáváme čtyři různé typy spojení na základě podmnožiny dat, které vybereme ze dvou tabulek.
Syntaxe spojení:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Typy spojení v SQL
- Vnitřní spojení
- Levé připojení
- Správné připojení
- Plné připojení
Níže podrobně vysvětlíme různé typy spojení.
1. Vnitřní připojení
Ve vnitřním spojení vybereme pouze data, která jsou společná v obou tabulkách. (tj. část 3 zde) Za účelem zpřesnění se v tomto spojení vyberou všechny záznamy z obou tabulek, které odpovídají stavu uvedenému se spojením.
Syntaxe vnitřního spojení:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Připojte se vlevo
V levém spojení vybereme všechna data z levé tabulky az pravé tabulky vybereme pouze sadu dat, která odpovídá stavu uvedenému v spojení (zde oblast 1 + 3)
Syntaxe levého spojení:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Správné připojení
V pravém spojení vybereme všechna data ze správné tabulky a z levé tabulky vybereme pouze sadu dat, která odpovídá stavu uvedenému u spojení (zde 3 + 2)
Syntaxe správného spojení:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Úplné připojení
Při úplném spojení se všechny záznamy z obou tabulek sloučí a vyberou bez ohledu na stav uvedený s tím, že spojení bylo splněno nebo ne. (zde 1 + 2 + 3)
Syntaxe úplného spojení:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Příklady spojení v SQL
Zvažte následující dvě tabulky:
1. Příklad ORDER_DETAILS
Tabulka objednávky obsahuje podrobnosti o objednávce zadané zákazníkem, jako je ID objednávky, počet objednaných produktů, částka objednávky, ID zákazníka, který objednávku zadal, a datum, kdy byla objednávka zadána. Takovýto stůl může být použit na kterémkoli online webu k uložení podrobností objednávky.
Tabulka ORDER_DETAILS:
Číslo objednávky | No_of_Items | Order_Amount | Zákaznické identifikační číslo | Datum objednávky |
123 | 3 | 5500 | P_1 | 01/20/2019 |
234 | 2 | 6500 | P_12 | 02/10/2019 |
345 | 1 | 10000 | P_13 | 27.5.2019 |
456 | 4 | 4000 | P_14 | 11/07/2019 |
567 | 2 | 20656 | P_1 | 15/15/2019 |
678 | 3 | 15000 | P_11 | 27/27/2019 |
2. Příklad CUSTOMER_DETAILS
Nyní si vezměme další tabulku, ve které budou uloženy údaje o zákazníkovi, abychom mohli doručit objednávku na jejich příslušné adresy. Tabulka zákazníků bude proto obsahovat podrobnosti o zákazníkovi, jako je ID zákazníka (cust_id), které budou pro každého zákazníka jedinečné. Nyní se jméno a příjmení uloží do pole s názvem - Cust_First_Name a Cust_Last_Name. V dalších polích budou uloženy informace, jako je e-mailové ID, mobilní číslo zákazníka spolu s adresou, kódem PIN, městem a státem. Můžeme tedy vidět, že náš stůl se zákazníky bude vypadat jako -
Tabulka CUSTOMER_DETAILS:
Cust_Id | Cust_First_Name | Cust_Last_Name | PIN kód | Adresa | Cust_Mobile | Město | Stát | Cust_email |
P_50 | Alice | Petr | 111111 | 330 xyz ulice | 123 | Bangalore | KA | |
P_12 | James | Dsouza | 155511 | 420 abc kolonie | 234 | Hyderabad | AP | |
P_15 | Harry | Hrnčíř | 123456 | 551 mg silnice | 444 | Noida | Dillí | |
P_40 | Miley | Parkere | 111121 | 11 stop silnice | 224 | Bangalore | KA | |
P_10 | Herman | Keř | 123423 | 34th thanco Street | 432 | Dillí | Dillí | |
P_18 | Dan | Hnědý | 134523 | 50. nezávislá silnice | 145 | Gurugram | Haryana | |
P_20 | James | Russel | 111111 | 101 mg silnice | 678 | Bangalore | KA | |
P_1 | Miley | Madison | 100011 | 45. rozložení kaverappa | 987 | Chennai | TN |
Nyní používáme tento příklad a vysvětlíme funkčnost spojení. Vidíme, že vztah mezi dvěma tabulkami, tj. Tabulkou ORDER_DETAILS a tabulkou CUSTOMER_DETAILS, je stanoven klíčem, který má hodnotu id zákazníka, tj. Customer_Id, což je primární klíč v tabulce CUSTOMER_DETAILS a cizím klíčem v tabulce ORDER_DETAILS tabulka.
Než budeme pokračovat, je třeba poznamenat několik důležitých bodů:
- Ne všichni zákazníci v naší tabulce CUSTOMER_DETAILS podali žádost o objednávku.
- Ne všechny žádosti o objednávku, které máme v naší tabulce ORDER_DETAILS, mají customer_id, který je přítomen v naší tabulce CUSTOMER_DETAILS, což znamená, že u některých objednávek není detail zákazníka.
3. Vnitřní připojení
Vnitřní spojení vám poskytne pouze ty záznamy, pro které je podmínka splněna.
Dotaz:
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ýstup:
Cust_First_Name | Cust_email | No_of_Items | Order_Amount | Datum objednávky |
Miley | 3 | 5500 | 01/20/2019 | |
James | 2 | 6500 | 02/10/2019 | |
Miley | 2 | 20656 | 15/15/2019 |
4. Levé připojení
Levé spojení vám poskytne všechny záznamy z levé tabulky, tj. Tabulky CUSTOMER_DETAILS. Pokud zákazník nezadá žádné objednávky, vrátí nulovou hodnotu pro sloupce v tabulce ORDER_DETAILS.
Dotaz:
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ýstup:
Cust_First_Name | Cust_email | No_of_Items | Order_Amount | Datum objednávky |
Alice | NULA | NULA | NULA | |
James | 2 | 6500 | 02/10/2019 | |
Harry | NULA | NULA | NULA | |
Miley | NULA | NULA | NULA | |
Herman | NULA | NULA | NULA | |
Dan | NULA | NULA | NULA | |
James | NULA | NULA | NULA | |
Miley | 3 | 5500 | 01/20/2019 | |
Miley | 2 | 20656 | 15/15/2019 |
5. Správné připojení
Správně, spojení vám poskytne všechny záznamy ze správné tabulky, tj. Tabulky ORDER_DETAILS. Pokud pro objednávku nebyly nalezeny žádné záznamy zákazníků, vrátí nulovou hodnotu pro sloupce v tabulce CUSTOMER_DETAILS.
Dotaz:
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ýstup:
Cust_First_Name | Cust_email | No_of_Items | Order_Amount | Datum objednávky |
Miley | 3 | 5500 | 01/20/2019 | |
James | 2 | 6500 | 02/10/2019 | |
NULA | NULA | 1 | 10000 | 27.5.2019 |
NULA | NULA | 4 | 4000 | 11/07/2019 |
Miley | 2 | 20656 | 15/15/2019 | |
NULA | NULA | 3 | 15000 | 27/27/2019 |
6. Plné připojení
Full Join vám poskytne všechny záznamy uvedené v obou tabulkách.
Dotaz:
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ýstup:
Cust_First_Name | Cust_email | No_of_Items | Order_Amount | Datum objednávky |
Alice | NULA | NULA | NULA | |
James | 2 | 6500 | 02/10/2019 | |
Harry | NULA | NULA | NULA | |
Miley | NULA | NULA | NULA | |
Herman | NULA | NULA | NULA | |
Dan | NULA | NULA | NULA | |
James | NULA | NULA | NULA | |
Miley | 3 | 5500 | 01/20/2019 | |
Miley | 2 | 20656 | 15/15/2019 | |
NULA | NULA | 1 | 10000 | 27.5.2019 |
NULA | NULA | 4 | 4000 | 11/07/2019 |
NULA | NULA | 3 | 15000 | 27/27/2019 |
Výhody spojení v SQL
- Rychlejší provedení, což znamená rychlejší vyhledávání požadovaných sloupců.
- Optimalizované, čitelné a pochopitelné
- Zvýšení výkonu.
Závěr
Jak je vidět, používáme JOIN k připojení a získávání polí z různých tabulek.
- Vnitřní spojení vyvolá záznamy, kde je splněna daná podmínka.
- Levé spojení vám poskytne všechny řádky z levé tabulky, i když daná podmínka neodpovídá.
- Right Join vám poskytne všechny řádky z levé tabulky, i když daná podmínka neodpovídá.
- Úplné spojení vrací všechny řádky, pokud existuje shoda v jedné z tabulek.
- Spojovací dotazy lze použít s příkazy jako - SELECT, INSERT, UPDATE, DELETE.
- Připojí se také k různým klauzulím, jako jsou - GROUP BY, SUB QUERIES, WHERE, AGGREGATE FUNCTIONS atd.
Doporučený článek
Toto byl průvodce typy připojení v SQL. Zde diskutujeme různé typy spojení v SQL a jeho výhody spolu s příklady. Další informace naleznete také v dalších navrhovaných článcích -
- Výhody NoSQL
- Nástroje pro správu SQL
- Databáze v SQL
- Zástupný znak v SQL
- Top 6 typů spojení v MySQL s příklady