Souhrn: v tomto kurzu se naučíte, jak dotazovat data z více tabulek pomocí příkazu SQL INNER JOIN.
V předchozím kurzu jste se naučili dotazovat se na data z jedné tabulky pomocí příkazu SELECT. Často však chcete dotazovat data z více tabulek, abyste měli k dispozici kompletní sadu výsledků pro analýzu. K dotazování na data z více tabulek používáte příkazy join.
SQL poskytuje několik typů spojení, jako je vnitřní spojení, vnější spojení (levé vnější spojení nebo levé spojení, pravé vnější spojení nebo pravé spojení a úplné vnější spojení ) a připojte se. V tomto kurzu vám ukážeme, jak používat klauzuli INNER JOIN.
Syntaxe SQL INNER JOIN
Následující příklad ukazuje INNER JOIN syntaxe pro spojení dvou tabulek:
|
1
2
3
4
5
|
SELECT
column1, column2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
Podívejme se podrobněji na výše uvedenou syntaxi:
-
table_1atable_2se nazývají spojené tabulky. - Pro každý řádek v
table_1vyhledá dotaz odpovídající řádek vtable_2, který splňuje podmínku spojení. Pokud byl nalezen odpovídající řádek, vrátí dotaz řádek, který obsahuje data z obou tabulek. Jinak prozkoumá další řádek vtable_1a tento proces pokračuje, dokud nebudou prozkoumány všechny řádky vtable_1.
Pro připojení více než dvou tabulek byla použita stejná logika.
Příklady SQL INNER JOIN
SQL INNER JOIN – dotazování na data ze dvou tabulek příklad
V tomto příkladu použijeme v ukázkové databázi tabulky products a categories. Následující obrázek ilustruje databázový diagram.
Ve výše uvedeném diagramu:
- Jedna kategorie může mít mnoho produktů.
- Jeden produkt patří do jedné a pouze jedné kategorie.
Proto mezi řádky v tabulka a řádky v tabulce products. Spojením mezi těmito dvěma tabulkami je sloupec categoryid.
Z obou tabulek musíme zjistit následující údaje:
-
productID,productNamezproductstabulky. -
categoryNamezcategoriestabulky.
Následující dotaz načte data z obou tabulek:
|
1
2
3
4
5
6
|
SELECT
productID, productName, categoryName
OD
produktů
VNITŘNÍ PŘIPOJENÍ
category ON categories.categoryID = products.categoryID;
|
Podmínka spojení je uvedena v klauzuli INNER JOIN za klíčovým slovem ON jako výraz:
|
1
|
category.categoryID = products.categoryID
|
Pro každý řádek v products tabulka, dotaz najde odpovídající řádek v categories tabulce, který má stejnou categoryid. Pokud existuje shoda mezi dvěma řádky v v obou tabulkách vrací řádek, který obsahuje sloupce uvedené v klauzuli SELECT, tj. ID produktu, název produktu a název kategorie; jinak zkontroluje další řádek v products tabulce a najde odpovídající řádek v categories tabulce. Tento proces pokračuje, dokud se neprozkoumá poslední řádek tabulky produktů.
SQL INNER JOIN – dotazování na data ze tří tabulek
Ke spojení tří tabulek můžeme použít stejné techniky.Následující dotaz vybere productID, productName, categoryName a supplier z products, categories a suppliers tabulek:
|
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
productID,
productName,
categoryName,
companyName jako dodavatel
Z
produktů
VNITŘNÍ PŘIPOJENÍ
kategorií ON kategorií. categoryID = products.categoryID
VNITŘNÍ PŘIPOJENÍ
dodavatelé ON na dodavatele.supplierID = produkty.supplierID
|
Implicit SQL INNER JOIN
Existuje další forma INNER JOIN nazývaná implicitní vnitřní spojení, jak je uvedeno níže:
|
1
2
3
4
5
6
7
|
VÝBĚR
sloupec1, sloupec2
OD
tabulka_1,
tabulka_2
KDE
join_condition;
|
V tomto formuláři určíte všechny spojené tabulky v klauzuli FROM a v klauzuli WHERE příkazu SELECT vložte podmínku join. Výše uvedený příklad dotazu můžeme přepsat pomocí implicitního INNER JOIN takto:
|
1
2
3
4
5
6
7
|
SELECT
ID produktu, název produktu, název kategorie
OD
produkty,
kategorie
KDE
products.categoryID = category.categoryID;
|