Přejít na hlavní obsah

Jak se liší levý outer join od pravého outer join

  • Adam Bartošová
  • Tipy

V SQL existuje několik typů připojení (join), které vám umožňují kombinovat data z různých tabulek do jednoho výsledku. Jedním z těchto typů je outer join (externí připojení). V závislosti na zvoleném typu externího připojení lze získat různé kombinace dat.

Left outer join (levé externí připojení) a right outer join (pravé externí připojení) jsou dvě různé možnosti externího připojení. Hlavní rozdíl mezi nimi je v pořadí kombinovaných tabulek.

Při použití left outer join je levá (první) tabulka hlavní tabulkou a pravá (druhá) tabulka doplňuje výsledky dotazu. To znamená, že všechny řádky z levé tabulky se zobrazí, i když v pravé tabulce nenajdou odpovídající řádky. Pokud v pravé tabulce není příslušný řádek, zobrazí se místo hodnot NULL.

Na druhou stranu, při použití right outer join je pravá (první) tabulka hlavní tabulkou a levá (druhá) tabulka doplňuje výsledky dotazu. To znamená, že všechny řádky z pravé tabulky se zobrazí, i když v levé tabulce nenajdou odpovídající řádky. Pokud v levé tabulce není příslušný řádek, zobrazí se místo hodnot NULL.

Co je left outer join?

Levá tabulka je základní a všechny její řádky jsou ve výsledku uloženy. Pokud je v pravé tabulce shoda pro řádek levé tabulky, přidá se k výsledku odpovídající řádek z pravé tabulky. V opačném případě se místo řádků z pravé tabulky výsledek vrátí NULL.

Left outer join se používá ke kombinaci dat ze dvou tabulek, když je nutné uložit všechny řádky z levé tabulky, i když v pravé tabulce není žádná odpovídající hodnota. To je užitečné při hledání informací, například když potřebujete najít všechny zákazníky a jejich objednávky, včetně zákazníků bez objednávek.

Příklad příkazu SQL k provedení left outer join:

SELECT * FROM left_table LEFT OUTER JOIN right_table ON left_table.id = right_table.id;

Obecný popis left outer join

Operace left outer join (nebo jednoduše LEFT join) je jeden typ připojení tabulek, který se používá v SQL ke sloučení dvou tabulek podle dané podmínky. Na rozdíl od interního připojení (inner join) uloží left outer join všechny řádky z levé tabulky a přidá odpovídající řádky z pravé tabulky.

Výsledkem je, že left outer join, který zahrnuje spojení tabulky a s tabulkou B, budou uvedeny všechny řádky z tabulky A a také ty řádky z tabulky B, které splňují podmínku připojení. Pokud v tabulce B nejsou žádné řádky, které by odpovídaly podmínce, budou místo hodnot nastaveny NULL.

Syntaxe operace left outer join je následující:

SELECT A.column1, B.column2FROM table_A ALEFT OUTER JOIN table_B B ON A.key = B.key

V tomto příkladu se vytvoří spojení tabulky a s tabulkou B za podmínky dané klíči key. Výsledkem dotazu budou všechny řádky z tabulky A a také řádky z tabulky B, kde se hodnoty klíče key shodují.

Left outer join je užitečný v situacích, kdy je třeba získat všechny řádky z jedné tabulky a odpovídající řádky z jiné tabulky. To umožňuje kombinovat data z různých zdrojů a vytvářet úplnější zprávy nebo analytické příspěvky.

Je však třeba si uvědomit, že použití left outer join může vést k většímu počtu řádků ve výsledné tabulce, takže je třeba pečlivě analyzovat a kontrolovat data po připojení.

Příklad použití left outer join

Podívejme se na příklad použití left outer join na dvou tabulkách: "Customers "(zákazníci) a" Orders " (objednávky).

Tabulka "Customers" má následující sloupce:

  • customer_id - identifikátor zákazníka
  • customer_name - jméno zákazníka

Tabulka "Orders" má následující sloupce:

  • order_id - ID objednávky
  • customer_id - identifikátor zákazníka spojující tabulky "Customers" a "Orders"
  • order_date - datum objednávky

Chcete-li získat seznam všech zákazníků a jejich objednávek, můžete použít následující dotaz SQL s left outer join:

SELECT Customers.customer_name, Orders.order_id, Orders.order_dateFROM CustomersLEFT OUTER JOIN OrdersON Customers.customer_id = Orders.customer_id;

Výsledkem provedení tohoto dotazu bude tabulka obsahující následující sloupce:

  • customer_name - jméno zákazníka
  • order_id - ID objednávky
  • order_date - datum objednávky

Pokud má zákazník objednávky, bude výsledkem jejich identifikátory a data. Pokud zákazník nemá objednávky, budou v příslušných sloupcích nulové hodnoty.

Použití left outer join tak umožňuje získat úplný seznam zákazníků spolu s jejich objednávkami, včetně zákazníků bez objednávek.

Zpracování nulových hodnot při left outer join

Jedním z vrcholů, které odlišují left outer join od right outer join, je zpracování nulových hodnot. Při použití left outer join budou všechny řádky z levé tabulky, které v pravé tabulce nenašly shodu, stále vyvedeny, ale hodnoty sloupců z pravé tabulky v těchto řádcích budou NULL.

Pro lepší pochopení si vezměme příklad. Ať máme tabulku " studenti "se sloupci" ID "a" jméno "a tabulku" skóre "se sloupci" ID studenta "a"skóre". Chceme vypsat seznam všech studentů a jejich hodnocení a zároveň zohlednit, že ne všichni studenti mají známky.

Pomocí left outer join můžeme tyto tabulky sloučit takto:

SELECT Студенты.Имя, Оценки.ОценкаFROM СтудентыLEFT OUTER JOIN Оценки ON Студенты.ID = Оценки.ID_студента

Výsledek bude obsahovat všechny řádky z tabulky studenti, i když v tabulce hodnocení nejsou žádné relevantní záznamy. V tomto případě bude hodnota sloupce "skóre" NULL.

Pro snadnější vizualizaci výsledků můžeme použít následující dotaz:

SELECT Студенты.Имя, COALESCE(Оценки.Оценка, 'Нет оценки') AS ОценкаFROM СтудентыLEFT OUTER JOIN Оценки ON Студенты.ID = Оценки.ID_студента

V tomto případě, pokud student nemá známku, místo NULL vyšleme text "No assessment". Tímto způsobem můžeme lépe prezentovat informace a pochopit, kterým studentům chybí známky.

Co je right outer join?

Při použití right outer join se tabulka uvedená za klíčovým slovem right JOIN nazývá pravá tabulka a tabulka uvedená před klíčovým slovem LEFT JOIN se nazývá levá tabulka. Výsledek sloučení bude obsahovat všechny řádky z pravé tabulky a pouze odpovídající řádky z levé tabulky. Pokud v levé tabulce nejsou relevantní hodnoty, příslušná pole budou vyplněna hodnotami NULL.

Right outer join je užitečný v situacích, kdy je třeba získat všechny řádky z pravé tabulky, včetně těch, které nemají shodu v levé tabulce. To vám umožní analyzovat a porovnávat data z obou tabulek a zobrazit vztah mezi nimi.

Obecný popis right outer join

Pravé externí připojení (right outer join) se používá, když je důležité uložit všechny hodnoty z pravé tabulky, bez ohledu na jejich přítomnost v levé tabulce. Výsledkem práce right join je tedy nová tabulka, která v každém řádku obsahuje hodnoty z obou tabulek.

Při psaní SQL dotazu pro right outer join se používá klíčové slovo RIGHT JOIN, následovaný uvedením tabulek a podmínkou pro sloučení tabulek.

Příklad použití right outer join

Řekněme, že musíme získat seznam všech zákazníků, včetně těch, kteří nemají objednávky. V tomto případě budeme muset použít right outer join.

SQL dotaz pomocí right outer join může vypadat následovně:

SELECT *FROM clientsRIGHT OUTER JOIN orders ON clients.client_id = orders.client_id;

Výsledkem tohoto dotazu bude tabulka, do které budou zahrnuti všichni zákazníci z tabulky "zákazníci" a také příslušné objednávky z tabulky "objednávky". Pokud zákazník nemá objednávky, tabulka bude obsahovat hodnoty NULL pro příslušná pole tabulky objednávky.

Takový požadavek nám může pomoci analyzovat údaje o zákaznících a objednávkách, včetně zákazníků bez objednávek. Můžeme jej například použít k určení, kolik zákazníků neudělalo žádnou objednávku, nebo k vyhledání zákazníků, kteří provedli určitý počet objednávek.