Vnitřní připojení vs Vnější připojení
Vnitřní spojení a vnější připojení jsou dvě metody spojování SQL používané při zpracování dotazů pro databáze. Patří do rodiny klauzur o spojení (další dvě jsou Left a Right Joins). Existuje však vlastní spojení, které lze použít ve specializovaných situacích. Účelem spojení je kombinovat pole pomocí společných hodnot obou tabulek. Tyto spojení kombinují záznamy z více tabulek v databázi. Vytváří výsledné sady, které lze uložit jako jinou tabulku.
Co je Inner Join?
Nejčastěji používanou operací SQL Join je Inner Join. Lze to považovat za výchozí typ spojení používaný v aplikacích. Vnitřní spojení používá predikát spojení ke sloučení dvou tabulek. Předpokládejme, že obě tabulky jsou A a B, pak predikát spojení porovná řady A a B a zjistí všechny páry, které vyhovují predikátu. K vytvoření výsledku se kombinují hodnoty sloupců všech spokojených řádků tabulek A a B. Na to lze pohlížet jako na první, kdo vezme křížové spojení (kartézský produkt) všech záznamů a poté vrací pouze záznamy, které splňují predikát spojení. Ve skutečnosti však kartézský produkt není počítán, protože je velmi neefektivní. Místo toho se používá spojení typu hash nebo sort-merge.
Co je to vnější připojení?
Na rozdíl od Inner join, vnější join uchovává všechny záznamy, i když nemůže najít odpovídající záznam. To znamená, že vnější spojení potřebuje záznam k nalezení odpovídajícího záznamu, aby se ve výsledku objevil. Místo toho vrátí všechny záznamy, ale nesrovnatelné záznamy budou mít nulové hodnoty. Vnější spojení se dělí do tří dílčích kategorií. Jsou to levé vnější spojení, pravé vnější spojení a plné vnější spojení. Tato diferenciace je založena na tom, který řádek tabulky (levá tabulka, pravá tabulka nebo obě tabulky) je zachován, když jsou nalezeny nesrovnatelné záznamy. Levé vnější spojení (také známé jako jednoduše levé spojení) uchovává všechny záznamy levé tabulky. To znamená, že i když je počet odpovídajících záznamů nulový, bude mít stále ve výsledkové tabulce záznamy, ale bude mít nulové hodnoty pro všechny sloupce B. Jinými slovy, všechny hodnoty z levé tabulky jsou vráceny se shodnými hodnotami zprava tabulka (nebo nulové hodnoty, pokud se neshodují). Pokud jsou hodnoty z více řádků z levé tabulky porovnány s jedním řádkem z pravé tabulky, bude řádek z pravé tabulky opakován podle potřeby. Pravý vnější spoj je do značné míry podobný vnějšímu spoji vlevo, ale zpracování tabulek je ctěno. To znamená, že výsledek bude mít všechny řádky pravé tabulky alespoň jednou s odpovídajícími hodnotami levé tabulky (a nulové hodnoty pro nesrovnatelné pravé hodnoty). Úplné vnější spojení je komplexnější než levé a pravé vnější spojení. Výsledkem je kombinace účinku aplikace spojeného jak levého, tak pravého vnějšího.
Jaký je rozdíl mezi vnitřním připojením a vnějším připojením?
Vnitřní spojení nezachovává ve výsledku nesrovnatelné řádky, ale vnější spojení uchová všechny záznamy z alespoň jedné tabulky (v závislosti na tom, které vnější spojení bylo použito). Chování informací o nesrovnatelných řádcích ve výsledkové tabulce je tedy nežádoucí, je proto nutné vždy použít jeden z vnějších spojení (namísto vnitřního spojení). Vnitřní spojení nemusí přinést výsledek, pokud nebudou nalezeny žádné zápasy. Vnější spojení však vždy vytvoří výslednou tabulku, a to i bez odpovídajících řádků. Vnitřní spojení vždy vrátí tabulky s hodnotami (pokud byly vráceny). Vnější spojení však může vést k tabulkám s nulovými hodnotami.