Tato část se věnuje vnitřnímu spojení tabulek. Po jejím dokončení budete umět spojovat tabulky dohromady a využívat tak v rámci jednoho dotazu sloupce z více různých tabulek.
SQL4 - Vnitřní spojení
Tato část se věnuje vnitřnímu spojení tabulek. Po jejím dokončení budete umět spojovat tabulky dohromady a využívat tak v rámci jednoho dotazu sloupce z více různých tabulek.
Typy spojení
Pro začátek se podíváme na to, jaké existují typy spojení a jaké jsou mezi nimi rozdíly. Spojení dělíme v zásadě na vnitřní, vnější a ostatní. Vnitřní spojení (INNER JOIN) nám umožňuje spojit řádky ze dvou tabulek, které spolu souvisí. Výsledné řádky tedy musí mít obě strany (čili existují v pravé i levé tabulce). Oproti tomu u vnějších spojení (OUTER JOIN) stačí, pokud řádek existuje v jedné z nich. Význam tohoto rozdílu bude podrobněji vysvětlen v následující části. Mezi ostatní spojení patří například CROSS JOIN, který vygeneruje kartézský součin záznamů z obou tabulek. Těmto typům spojení se v tomto seriálu věnovat nebudeme.
Jak spojení napsat
Spojení tabulek se v rámci příkazu SELECT definuje v části FROM. Zde se uvedou spojované tabulky, klíčové slovo (INNER) JOIN mezi nimi a podmínku ON, která určuje, na základě čeho se budou tabulky spojovat. Klíčové slovo INNER je nepovinné. Pokud tedy napíšete jen JOIN, považuje se automaticky za vnitřní. Zápis spojení tabulek tedy může vypadat například takto:
SELECT
*
FROM
Product AS p JOIN Sales s ON p.ProductID = s.ProductID
Všimněte si, že názvy tabulek jsou doplněny o tzv. aliasy. To znamená, že například tabulce Product přiřadíme zkratku p a dále (například v podmínce ON) už můžeme pracovat s touto zkratkou. Klíčové slovo AS je nepovinné, lze tedy psát přímo Product p JOIN Sales s.
Pokud je spojení zapsáno na jednom řádku, je jasně patrné, která tabulka je levá a která pravá. V praxi se však spojení zapisují tak, že jsou jednotlivé tabulky na samostatných řádcích. V tom případě je levá strana na prvním řádku a pravá strana na druhém řádku. Předchozí SELECT by tedy vypadal takto:
SELECT
*
FROM
Product AS p
JOIN Sales s ON p.ProductID = s.ProductID
Tento způsob zápisu je vhodný obzvláště při spojování více než dvou tabulek.
Podmínka ON
Tato podmínka určuje, za jakých podmínek se má pravá a levá část spojit. Obvykle tato podmínka kopíruje vazbu (cizí klíč) mezi tabulkami. Lze ji však pomocí logických spojek (AND, OR, …) rozšířit o další části. Příklad, kdy je to vhodné, bude uveden v následující části. Dávejte si však pozor na to, aby byla podmínka určena správně. Pokud by byla tato podmínka například za všech okolností pravdivá, budou výsledkem všechny kombinace všech řádků z levé a pravé tabulky. Naopak, pokud nebude možné podmínku nikdy splnit, bude výstup prázdný.
Pořadí tabulek
V případě vnitřního spojení na pořadí tabulek nezáleží, protože musí být vždy přítomna pravá i levá strana výsledného řádku. To však neznamená, že lze tabulky psát libovolně. Při spojování více tabulek je třeba postupovat podle vazeb mezi nimi. Pokud chci například spojit tabulky Product, Sales a Country, nemohu začít spojením Product a Country, protože mezi těmito tabulkami neexistuje žádná vazba. Je tedy třeba napřed propojit například Product a Sales. Už ale nezáleží na tom, zda bude Product vlevo a Sales vpravo nebo naopak.
Další materiály
Pokud si budete chtít spojování tabulek vyzkoušet přetahováním jednotlivých řádků jako ve videu, můžete využít soubor SQL4.drawio. Stačí přistoupit na adresu draw.io, zvolit možnost Open Existing Diagram a vybrat tento soubor.
Samostatná práce
V prezentaci SQL4 - Samostatná práce naleznete příklady na procvičení znalostí získaných v této části. Na každém snímku je vždy zadání a po posunutí se zobrazí odpověď. Než se na odpověď podíváte, zkuste nejdřív přijít na řešení samostatně.