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_1
atable_2
se nazývají spojené tabulky. - Pro každý řádek v
table_1
vyhledá 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_1
a 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
,productName
zproducts
tabulky. -
categoryName
zcategories
tabulky.
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;
|