Ú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

  1. Vnitřní spojení
  2. Levé připojení
  3. Správné připojení
  4. 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

  1. Rychlejší provedení, což znamená rychlejší vyhledávání požadovaných sloupců.
  2. Optimalizované, čitelné a pochopitelné
  3. 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 -

  1. Výhody NoSQL
  2. Nástroje pro správu SQL
  3. Databáze v SQL
  4. Zástupný znak v SQL
  5. Top 6 typů spojení v MySQL s příklady