Spojit tři tabulky v SQL

Spojit Tri Tabulky V Sql



V relačních databázích je úkol načítání dat z více tabulek extrémně běžný. V závislosti na cílovém výsledku to zahrnuje spojení více tabulek do jedné jednotky a načtení výsledných dat.

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 sloupce

Z 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 sloupce

Z 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 sloupce

Z 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 sloupce

Z 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:

VYBRAT

film.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:

VYBRAT

film.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.