Je samozřejmé, že spojení je jednou z nejlépe identifikovatelných vlastností relačních databází. Spojení nám umožňují kombinovat data z jedné nebo více tabulek na základě související podmínky a vytvořit tak koherentní datovou operaci.
V SQL existují různé typy spojení, z nichž každý má jedinečný způsob, jak nakládá s daty ze zúčastněných tabulek nebo výsledné sady. Jedním z nejběžnějších typů spojení v SQL je OUTER JOIN.
OUTER JOIN v SQL načte všechny odpovídající řádky ze zúčastněných tabulek i nespárované řádky z jedné nebo obou tabulek. Hodí se, když pracujete s tabulkami, které obsahují hodnoty NULL nebo chybějící sady.
Pojďme dále prozkoumat, co tato spojení dělají, jak fungují a jak je můžeme použít v databázi SQL.
Požadavky:
V tomto tutoriálu budeme pracovat s MySQL 8.0 a používat ukázkovou databázi Sakila. Neváhejte však použít jakýkoli jiný datový soubor, který považujete za vhodný.
Typy vnějších spojení
V SQL existují tři hlavní typy OUTER JOINS. Mezi tyto typy OUTER JOINS patří:
-
Levé OUTER JOINS
-
Vpravo VNĚJŠÍ SPOJENÍ
-
ÚPLNÉ VNĚJŠÍ SPOJENÍ
V případě LEFT OUTER JOINS spojení načte všechny řádky z levé tabulky a pouze odpovídající řádky z pravé tabulky. Pokud neexistují žádné odpovídající řádky z pravé tabulky, spojení vrátí hodnoty NULL pro sloupce v pravé tabulce.
Je to podobné jako RIGHT OUTER JOIN. Načte však všechny řádky z pravé tabulky, ale pouze odpovídající řádky z levé tabulky. Pokud neexistují žádné odpovídající řádky z levé tabulky, spojení obsahuje hodnoty NULL pro sloupce v levé tabulce.
Nakonec tu máme FULL OUTER JOINS. Tento typ spojení kombinuje PRAVÉ i LEVÉ vnější spojení. Výsledkem je, že spojení načte všechny řádky, pokud existuje shoda v levé nebo pravé tabulce. Pokud neexistuje žádná shoda, spojení vrátí hodnoty NULL pro sloupce z tabulky bez shody.
Syntaxe SQL OUTER JOIN
Následující text vyjadřuje syntaxi SQL OUTER JOIN. Je však dobré mít na paměti, že syntaxe se může mírně lišit v závislosti na cílovém databázovém stroji.
Následuje obecná struktura:
VYBERTE sloupceZ tabulky 1
[VLEVO | SPRÁVNĚ | FULL] OUTER JOIN tabulka2
ON tabulka1.název_sloupce = tabulka2.název_sloupce;
Syntaxe OUTER JOIN v SQL je docela samovysvětlující.
Příklady:
Podívejme se na ukázkové použití, jak můžeme použít různé typy OUTER JOINS v SQL.
Jak jsme zmínili, k demonstraci použijeme ukázkovou databázi Sakila. V tomto případě používáme tabulky „zákazník“ a „platba“.
Příklad 1: LEVÁ VNĚJŠÍ SPOJ
Začněme OUTER JOIN. Předpokládejme, že chceme získat všechny informace o zákaznících spolu s jejich platebními údaji, pokud jsou k dispozici.
Díky tomu lze použít LEFT OUTER JOIN, protože chceme všechny informace o zákaznících (vlevo) a platební údaje, pokud jsou k dispozici (vpravo).
Pokud zákazník neprovedl žádnou platbu, spojení zobrazí hodnoty NULL pro sloupce související s platbou.
Příklad je následující:
VYBRATc.customer_id,
c.křestní_jméno,
c.last_name,
p.částka,
p.datum_platby
Z
zákazník c
LEFT OUTER JOIN platba str
NA
c.customer_id = p.customer_id;
Do daného dotazu zahrneme sloupce „customer_id“, „first_name“ a „last_name“ z tabulky „customer“. Zahrnujeme také částku a „datum_platby“ z tabulky „platba“.
Poté provedeme LEFT OUTER JOIN mezi tabulkami „zákazník“ a „platba“ na základě „id_zákazníka“.
Jedná se o všechny zákazníky (ať již platbu provedli či nikoli) spolu s jejich platebními údaji (pokud existují).
Příklad výstupu je následující:
Příklad 2: PRAVÉ VNĚJŠÍ SPOJENÍ
Nyní přejděme k PRAVÉMU VNĚJŠÍMU PŘIPOJENÍ. Předpokládejme, že v tomto případě chceme uvést všechny platební údaje a souvisejícího zákazníka, pokud existuje.
V tomto případě, pokud platbu provede zákazník, spojení zobrazí podrobnosti o tomto zákazníkovi. Pokud existuje platba bez přidruženého zákazníka, zobrazí se hodnoty NULL pro sloupce související se zákazníkem.
VYBRATc.customer_id,
c.křestní_jméno,
c.last_name,
p.částka,
p.datum_platby
Z
zákazník c
RIGHT OUTER JOIN platba str
NA
c.customer_id = p.customer_id;
Výsledná sada je následující:
Příklad 3: ÚPLNÉ VNĚJŠÍ SPOJENÍ
Na druhé straně FULL OUTER JOIN načte všechny informace o zákazníkovi a platby. To zahrnuje všechny zákazníky a všechny platby a zobrazuje hodnoty NULL, pokud mezi tabulkami není žádná shoda.
VYBRATc.customer_id,
c.křestní_jméno,
c.last_name,
p.částka,
p.datum_platby
Z
zákazník c
FULL OUTER JOIN platba str
NA
c.customer_id = p.customer_id;
Je dobré mít na paměti, že MySQL nativně nepodporuje FULL OUTER JOIN. Musíte udělat nějaké jiujitsu kouzlo s LEFT JOIN, UNION a RIGHT JOIN. Docela nepříjemné, mohli bychom dodat.
Závěr
V tomto tutoriálu jsme se dozvěděli vše o OUTER JOINS. Naučili jsme se, co je OUTER JOIN v SQL, typy OUTER JOINS a příklady použití těchto typů OUTER JOINS.