Vnější spojení SQL

Vnejsi Spojeni Sql



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ří:

  1. Levé OUTER JOINS

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



  3. Vpravo VNĚJŠÍ SPOJENÍ

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

  5. ÚPLNÉ VNĚJŠÍ SPOJENÍ

  6. 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 sloupce
Z 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í:

VYBRAT
c.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.

VYBRAT
c.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.

VYBRAT
c.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.