Inner Join vs Outer Join
Vnitřní spojení a vnější spojení jsou dvě metody spojení SQL používané při zpracování dotazů pro databáze. Patří do rodiny spojovacích klauzulí (další dvě jsou levé a pravé spojení). Existuje však funkce Self Join, kterou lze použít pro speciální situace. Účelem Join je kombinovat pole pomocí společných hodnot pro dvě tabulky. Tato spojení kombinují záznamy z více tabulek v databázi. Vytváří výsledné množiny, které lze uložit jako další tabulku.
Co je Inner Join?
Nejběžněji používanou operací SQL Join je Inner Join. Lze jej považovat za výchozí typ spojení používaný v aplikacích. Vnitřní spojení použijte ke spojení dvou tabulek predikát spojení. Za předpokladu, že dvě tabulky jsou A a B, potom predikát spojení porovná řádky A a B, aby zjistil všechny páry, které splňují predikát. Hodnoty sloupců všech splněných řádků tabulek A a B se zkombinují a vytvoří se výsledek. Dá se na to pohlížet tak, že se nejprve vezme křížové spojení (kartézský součin) všech záznamů a pak se vrátí pouze záznamy, které splňují predikát spojení. Ve skutečnosti se však kartézský součin nepočítá, protože je velmi neefektivní. Místo toho se používá spojení hash nebo spojení s řazením.
Co je Outer Join?
Na rozdíl od vnitřního spojení uchovává vnější spojení 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í shodného záznamu, aby se zobrazilo ve výsledku. Místo toho vrátí všechny záznamy, ale neshodné záznamy budou mít hodnoty null. Vnější spoje jsou rozděleny do tří podkategorií. Jsou to levé vnější spojení, pravé vnější spojení a úplné vnější spojení. Toto rozlišení je založeno na tom, který řádek tabulky (levá tabulka, pravá tabulka nebo obě tabulky) je zachován, když jsou nalezeny neodpovídající 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ů nula, bude mít stále záznamy ve výsledkové tabulce, ale bude mít hodnoty null pro všechny sloupce B. Jinými slovy, všechny hodnoty z levé tabulky jsou vráceny se shodnými hodnotami zprava tabulka (nebo hodnoty null, pokud se neshodují). Pokud se hodnoty z více řádků z levé tabulky shodují s jedním řádkem z pravé tabulky, řádek z pravé tabulky se bude podle potřeby opakovat. Pravé vnější spojení je do značné míry podobné levému vnějšímu spojení, ale zacházení s tabulkami je respektováno. To znamená, že ve výsledku budou mít všechny řádky pravé tabulky alespoň jednou odpovídající hodnoty levé tabulky (a hodnoty null pro neodpovídající pravé hodnoty). Úplné vnější spojení je obsáhlejší než levé i pravé vnější spojení. Výsledkem je kombinace efektu aplikace levého a pravého vnějšího spojeného dohromady.
Jaký je rozdíl mezi Inner Join a Outer Join?
Vnitřní spojení nezachová neshodné řádky ve výsledku, ale vnější spojení zachová všechny záznamy z alespoň jedné tabulky (v závislosti na použitém vnějším spojení). Chování, kdy nejsou přítomny žádné informace o neshodných řádcích ve výsledné tabulce, je tedy nežádoucí, musíte vždy použít jedno z vnějších spojení (místo vnitřního spojení). Vnitřní spojení nemusí přinést výsledek, pokud nebudou nalezeny žádné shody. 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 se vrátí). Vnější spojení však mohou vést k tabulkám s nulovými hodnotami.