Pokud jde o joiny, většina z nás pracuje hlavně s limitem dvou stolů a podobně. Je však běžné, že potřebujete spojit tři tabulky, abyste získali smysluplnější rozložení dat a přehled. Vezměme si například místo, kde chcete načíst seznam filmů, jejich odpovídající inventář výpůjček a skutečné podrobnosti o výpůjčce. Každá z těchto jednotek, jako jsou filmy, inventář a podrobnosti o pronájmu, jsou v jednotlivých tabulkách.
V tomto tutoriálu vás provedeme různými spojeními a technikami, které můžete použít ke spojení tří tabulek v SQL.
Požadavky:
Pro demonstrační účely použijeme MySQL verze 80 a ukázkovou databázi Sakila. Chcete-li pokračovat, můžete si stáhnout a nastavit databázi Sakila na vašem serveru MySQL. Neváhejte použít jakýkoli jiný datový soubor, který považujete za vhodný.
Typy spojení v SQL
Než se dostaneme k aplikaci spojení, začněme diskusí o různých typech spojení, která jsou k dispozici v databázích SQL.
VNITŘNÍ SPOJENÍ
Prvním typem spojení je INNER JOIN. Tento typ spojení vrátí pouze řádky, které obsahují odpovídající hodnotu v obou tabulkách. Je to velmi běžný typ spojení a je nejjednodušší při spojení dvou tabulek.
Syntaxe je následující:
VYBERTE sloupceZ tabulky 1
Tabulka INNER JOIN2 NA tabulka1.název_sloupce = tabulka2.název_sloupce;
PŘIPOJIT SE VLEVO
V případě LEFT JOIN vrátí všechny řádky z levé tabulky a odpovídající řádky z pravé tabulky. Pokud neexistují žádné odpovídající hodnoty z pravé tabulky, spojení přidá na jejich místo hodnoty NULL.
Syntaxe je následující:
VYBERTE sloupceZ tabulky 1
LEFT JOIN tabulka2 NA tabulka1.název_sloupce = tabulka2.název_sloupce;
SPRÁVNÉ PŘIPOJENÍ SE
Jak správně tušíte, RIGHT JOIN je opakem LEFT JOIN. Tento typ spojení vrátí všechny řádky z pravé tabulky a pouze odpovídající řádky z levé tabulky. Pokud v levé tabulce nejsou žádné odpovídající řádky, spojení do ní přidá hodnoty NULL.
Následuje syntaxe RIGHT JOIN:
VYBERTE sloupceZ tabulky 1
Tabulka RIGHT JOIN2 NA tabulka1.název_sloupce = tabulka2.název_sloupce;
ÚPLNÉ VNĚJŠÍ PŘIPOJENÍ
Dalším typem spojení, se kterým se v SQL databázích setkáte, je FULL OUTER JOIN. Tento typ spojení vrátí všechny řádky, pokud existuje shoda v pravé nebo levé tabulce. Pokud není žádná odpovídající hodnota v žádné z těchto dvou, vrátí hodnotu NULL pro sloupce z tabulky bez shody.
Následující text ukazuje syntaxi FULL OUTER JOIN:
VYBERTE sloupceZ tabulky 1
Tabulka FULL OUTER JOIN2 NA tabulka1.název_sloupce = tabulka2.název_sloupce;
Je dobré mít na paměti, že ne všechny databázové stroje podporují FULL OUTER JOINS. Abyste toho dosáhli, možná budete muset pracovat s jinými typy JOINS nebo dílčími dotazy.
Příklady:
Podívejme se na několik příkladů, jak můžeme použít tyto typy spojení ke spojení tří tabulek v SQL.
Příklad 1: Použití INNER JOIN
Začínáme INNER JOIN. Předpokládejme, že chceme získat seznam filmů, inventář výpůjček a odpovídající podrobnosti o výpůjčce.
Můžeme použít více INNER JOINS na přidružených tabulkách, jak ukazuje následující příklad:
VYBRATfilm.název,
inventar.inventory_id,
pronájem.datum_pronájmu
Z
film
INNER JOIN inventář NA
film.film_id = inventář.film_id
Pronájem INNER JOIN NA
inventar.id_inventory = pronájem.id_inventáře;
V uvedeném příkladu dotazu začneme spojením filmových a inventárních tabulek na základě sloupce „film_id“. Poté vezmeme výslednou sadu a spojíme ji s tabulkou pronájmu na základě sloupce „id_inventáře“.
Tím je zajištěno, že tři stoly spojíme základním INNER JOIN. Výsledná sada je následující:
Příklad 2: Použití INNER JOIN a LEFT JOIN
Řekněme, že nyní chceme seznam filmů, seznam půjčoven (pokud nějaké existují) a související podrobnosti o půjčovnách.
Chceme také zajistit, že i když film nemá inventář půjčovny, stále jej zahrneme do výsledku. Zde přichází na řadu INNER JOIN a LEFT JOIN.
Zvažte následující příklad:
VYBRATfilm.název,
inventar.inventory_id,
pronájem.datum_pronájmu
Z
film
INNER JOIN inventář NA
film.film_id = inventář.film_id
LEFT JOIN pronájem NA
inventar.id_inventory = pronájem.id_inventáře;
V tomto příkladu používáme INNER JOIN k připojení k tabulce filmů a inventáře, abychom zajistili, že získáme tituly s dostupným inventářem. Poté použijeme LEVÉ PŘIPOJENÍ k připojení k tabulce výpůjček, abychom získali podrobnosti o výpůjčce, pokud jsou k dispozici, a NULL pro jakýkoli titul, který nemá historii výpůjček.
Výsledná sada je následující:
Závěr
V tomto tutoriálu jsme se dozvěděli o různých typech JOINS v SQL, jak fungují a jak je můžeme použít ke kombinaci tří tabulek.