Úvod do spojení v MySQL
MySQL Joins hraje důležitou roli, když musíme spojit dvě tabulky dohromady na základě jedné nebo více společných hodnot sdílených dvěma tabulkami.
Příklad : Uvažujme, že máme dvě tabulky, jedna je tabulka zaměstnanců sestávající z Employ_id, phn_no, platu a oddělení. Další tabulkou je tabulka adres, která se skládá z employee_id a adresy. Pokud potřebujeme zjistit zaměstnance_id, oddělení a adresu, musíme se připojit k oběma tabulkám, které sdílejí společné pole, jako zaměstnanec_id.
Dotaz :
SELECT e1.employee_id, e1.department, a1.address
FROM employee e1
INNER JOIN address a1
ON e1.employee_id = a1.employee_id;
Top 6 typů spojení v MySQL
V MySQL existují různé typy spojení. Níže uvedené spojení se objevují v každodenním použití a jsou nejužitečnější při provádění mnoha dotazů v reálných případech.
- Vnitřní spojení
- Připojte se vlevo
- Správné připojení
- Plné vnější spojení
- Připojte se
- Cross cross
1. Vnitřní připojení
Vnitřní spojení vrátí hodnotu, která se shoduje v obou tabulkách.
Tato část přichází do výstupu, jak je znázorněno na obrázku výše.
Příklad č. 1:
Emp_id | oddělení | Plat |
1001 | TO | 1000 |
1002 | CSR | 800 |
1003 | TO | 2000 |
Toto je tabulka zaměstnanců.
Emp_id | Adresa |
1002 | Dillí |
1003 | Bangalore |
1005 | Bbsr |
Zde je tabulka adres těchto zaměstnanců. Primární klíč zaměstnance mateřské tabulky emp_id se používá jako cizí klíč v tabulce adres, která je podřízenou tabulkou. Pomocí vnitřního spojení najdeme emp_id, oddělení a adresu jednoho zaměstnance. Protože vnitřní stavy spojení Vyvolává záznamy, které jsou přítomny / běžné v obou tabulkách.
Dotaz:
SELECT emp.emp_id, emp.department, ads.address
FROM employee AS emp
INNER JOIN address AS ads
ON emp.emp_id = ads.emp_id;
Název tabulky přidělujeme aliasu, abychom se vyhnuli časově náročnějším. Ve výše uvedeném dotazu používáme alias 'emp' pro tabulku zaměstnanců a 'ads' pro tabulku adres.
Výstup:
Emp_id | oddělení | Adresa |
1002 | CSR | Dillí |
1003 | TO | Bangalore |
Protože ve výše uvedeném příkladu byly emp_id 1002 a 1003 běžné mezi oběma tabulkami, příkaz vnitřní spojení vyvolá výstup pouze pro tyto zaměstnance.
Příklad č. 2:
Zde máme 2 tabulky, tabulka1 a tabulka2. Obě tabulky se skládají z jednoho atributu jako sloupec A a sloupec B.
Stůl 1
Sloupec A |
1 |
1 |
2 |
3 |
4 |
Tabulka 2
Sloupec B |
1 |
2 |
2 |
3 |
3 |
5 |
Dotaz:
If we apply inner join here,
SELECT * FROM Table1
INNER JOIN table2
ON columnA = columnB;
Výstup:
Sloupec A | Sloupec B |
1 | 1 |
1 | Nula |
2 | 2 |
Nula | 2 |
3 | 3 |
Nula | 3 |
2. Připojte se vlevo
Toto spojení vrací všechny záznamy z levé tabulky a odpovídající záznamy z pravé tabulky.
Jak ukazuje obrázek výše, skládá se ze všech záznamů tabulky A a společných záznamů z A a B.
Příklad č. 1:
Zákaznické identifikační číslo | název | Město |
1 | Harish | Cuttack |
2 | Davide | Bangalore |
3 | Mahesh | Bhubaneswar |
4 | Sam | Kalkata |
Tabulka zákazníků:
Číslo objednávky | Množství | Zákaznické identifikační číslo |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Tabulka objednávek:
Zjistíme customer_id, name a order_id spojené pomocí levého spojení.
Dotaz:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
LEFT JOIN order ord
ON cust.customer_id = ord.customer_id;
Výstup:
Zákaznické identifikační číslo | název | Číslo objednávky |
1 | Harish | nula |
2 | Davide | 19976 |
3 | Mahesh | 99680 |
4 | Sam | 19868 |
Jak jsme diskutovali, toto levé spojení vyvolalo všechny zákaznické ID ze zákaznické tabulky a společné mezi oběma tabulkami. U customer_id '1' se zobrazí jako 'null', protože customer_id '1' není v tabulce objednávek.
Příklad č. 2:
Zde máme 2 tabulky, tabulka1 a tabulka2. Obě tabulky se skládají z jednoho atributu jako sloupec A respektive sloupec B.
Stůl 1
Sloupec A |
1 |
1 |
2 |
2 |
3 |
Tabulka 2
Sloupec B |
1 |
2 |
2 |
4 |
4 |
5 |
5 |
Dotaz:
If we apply left join on above 2 tables,
SELECT * FROM table1
LEFT JOIN table2
ON columnA = columnB;
Sloupec A | Sloupec B |
1 | 1 |
1 | Nula |
2 | 2 |
2 | 2 |
3 | Nula |
3. Správné připojení
Toto spojení vrací všechny záznamy z pravé tabulky a odpovídající z levé tabulky.
Výše uvedený diagram ukazuje, že načte všechny záznamy z tabulky B a běžný, který je přítomen v obou tabulkách.
Příklad:
Zákaznické identifikační číslo | název | Město |
3 | Mahesh | Bhubaneswar |
4 | Sam | Kalkata |
5 | RAM | Bombaj |
Tabulka zákazníků:
Číslo objednávky | Množství | Zákaznické identifikační číslo |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Tabulka objednávek:
Pomocí pravého spojení zjistíme customer_id, name a order_id.
Dotaz:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
RIGHT JOIN order ord
ON cust.customer_id = ord.customer_id;
Výstup:
Zákaznické identifikační číslo | název | Číslo objednávky |
2 | nula | 19976 |
3 | Mahesh | 99680 |
4 | Sam | 19868 |
Když jsme provedli správné spojení, zde dotaz vyvolal veškeré zákaznické id z tabulky objednávek a společné záznamy, které jsou v obou tabulkách.
4. Úplné vnější připojení
Úplné vnější spojení vrací všechny záznamy z obou tabulek, pokud existuje společné pole sdílené.
Příklad:
Zákaznické identifikační číslo | název | Město |
3 | Mahesh | Bhubaneswar |
4 | Sam | Kalkata |
5 | RAM | Bombaj |
Tabulka zákazníků:
Číslo objednávky | Množství | Zákaznické identifikační číslo |
19868 | 7575, 00 | 4 |
19976 | 434654, 00 | 2 |
99680 | 7457, 00 | 3 |
Tabulka objednávek:
Najdeme customer_id, name a order_id asociované s ním pomocí úplného vnějšího spojení.
Dotaz:
SELECT cust.Customer_id, cust.Name, ord.Order_id
FROM customer cust
FULL OUTER JOIN order ord
ON cust.customer_id = ord.customer_id;
Výstup:
Zákaznické identifikační číslo | název | Číslo objednávky |
2 | nula | 19976 |
3 | Mahesh | 99680 |
4 | Sam | 19868 |
5 | RAM | nula |
Toto úplné vnější spojení vyvolalo veškeré zákaznické ID z tabulky zákazníků i tabulky objednávek.
5. Self-Join
Self-join je pravidelné spojení a zde se tabulka připojuje pouze k sobě.
Emp_id | název | Telefonní číslo | Město | Země |
1001 | R. Madhvan | 9687687698 | Bangalore | Indie |
1002 | Gobu Sharma | 9856453423 | Pune | Indie |
1003 | Zničte Das | 8765456787 | Bombaj | Indie |
1004 | Amit Rout | 4567788635 | Pune | Indie |
1005 | Sambit Kar | 8789887873 | Hyderabad | Indie |
Zde je tabulka zaměstnanců sestávající z několika polí. Zjistíme zaměstnance žijící ve stejném městě.
Dotaz :
SELECT e1.name AS Employee_name1, e2.name AS employee_name2, e1.City
FROM employee e1, employee e2
WHERE e1.name e2.name
AND e1.city = e2.city;
Výstup :
Employee_name1 | Employee_name2 | e1.city |
Gobu Sharma | Amit Rout | Pune |
Amit Rout | Gobu Sharma | Pune |
6. Cross Připojte se
Toto spojení vytvoří výsledek, kdy se počet řádků v první tabulce násobí řádky v druhé tabulce. Tento druh výsledku se nazývá kartézský produkt. Použijeme-li klauzuli WHERE s tímto spojením, bude to fungovat jako vnitřní spojení.
Příklad:
Prod_id | Jméno výrobku | Prod_unit | ID společnosti |
1 | Chex mix | Ks | 12 |
2 | Cheez-it | Ks | 15 |
3 | Šušenka | ks | 16 |
Tabulka produktů :
ID společnosti | Jméno společnosti | Company_city |
15 | Foodies | Dillí |
16 | Jack n Jill | Cuttack |
17 | Přírodní | Bangalore |
Tabulka společnosti :
Na tyto tabulky použijeme křížové spojení.
Dotaz :
SELECT p.product_name, p.prod_unit, c.company_name
FROM product p
CROSS JOIN company c;
Výstup :
p.product_name | p.prod_unit | c.company_name |
Chex mix | Ks | Foodies |
Cheez-it | Ks | Foodies |
Šušenka | Ks | Foodies |
Chex mix | Ks | Jack n Jill |
Cheez-it | Ks | Jack n Jill |
Šušenka | Ks | Jack n Jill |
Chex mix | Ks | Přírodní |
Cheez-it | Ks | Přírodní |
Šušenka | Ks | Přírodní |
Závěr
Význam těchto spojení je velmi důležitý při práci v scénářích v reálném čase i v některých dalších technologiích. Ve vizualizacích, jako jsou Tableau a Power BI, hrají spojení důležitou roli. Strukturovaná praxe je klíčem k začlenění těchto nových technik a dovedností.
Doporučený článek
Toto je průvodce připojením v MySQL. Zde diskutujeme prvních 6 typů spojení v MySQL jako Inner, Left, Right, Full, Self, Cross a jejich příklady spolu s dotazem a výstupem. můžete také projít naše doporučené články a dozvědět se více -
- Top 10 MySQL příkazů
- Úvod do MySQL operátorů
- MySQL vs. SQLite Top 14 Porovnání
- Top 23 funkcí MySQL String
- Vysvětlete příkaz Vložit v MySQL s příklady
- 6 hlavních rozdílů primárního klíče od cizího klíče