Přejít na hlavní obsah

Příklady použití join operátora v PostgreSQL

  • Květoslava Valenta
  • Praxe

Join operátor v PostgreSQL je jedním z nejdůležitějších nástrojů pro práci s databázemi. S ním je možné kombinovat data z více tabulek, vytvářet složitější dotazy a přijímat úplnější informace.

Příkladem typického problému řešeného pomocí operátora JOIN může být získání dat ze dvou tabulek, které jsou mezi sebou spojeny za určité podmínky. Můžete například sloučit tabulky "zákazníci" a "objednávky" podle pole "ID zákazníka" a získat informace o zákaznících, kteří objednávky provedli.

Existuje několik typů join operátora, z nichž každý je vhodný pro určité úkoly. Například INNER JOIN umožňuje získat pouze ty řádky, které splňují podmínku připojení, LEFT JOIN-všechny řádky z levé tabulky a odpovídající řádky z pravé tabulky, RIGHT JOIN - všechny řádky z pravé tabulky a odpovídající řádky z levé tabulky a nakonec FULL OUTER JOIN - všechny řádky z obou tabulek původního vzorku.

Vnitřní Sjednocení tabulek

Interní Sjednocení lze použít například ke spojení tabulky objednávky a tabulky zboží, aby bylo možné získat pouze objednávky, které obsahují příslušné položky.

K provedení interního sloučení se používá klíčové slovo INNER JOIN, za kterým jsou uvedena jména tabulek, které je třeba sloučit, a poté podmínka shody hodnot sloupců.

Následuje příklad dotazu SQL, který sloučí tabulku "objednávky" s tabulkou "zboží" podle sloupce " ID_ " a vybere pouze ty řádky, které mají shody hodnot:

  • SELECT objednávky. Id_objednávky, objednávky.Datum, Zboží.Jméno
  • FROM objednávky
  • Inner JOIN produkty
  • ON objednávky. Id_tovar = zboží. Id_tovar;

Výsledkem provedení takového dotazu bude tabulka obsahující sloupce "Id_zákaz"," datum "a" název", kde se hodnoty ve sloupci" ID_ " shodují.

Externí Sjednocení tabulek

Existují dva typy externích sloučenin: vnější levicové sdružení (LEFT OUTER JOIN) a vnější pravicové sdružení (RIGHT OUTER JOIN).

Vnější levicová unie (left OUTER JOIN) vrátí všechny řádky z levé tabulky a odpovídající řádky z pravé tabulky. Pokud pro řádky z levé tabulky nejsou v pravé tabulce relevantní řádky, pak hodnoty ve sloupcích odpovídajících pravé tabulce budou NULL.

Pravicová strana (RIGHT OUTER JOIN) vrátí všechny řádky z pravé tabulky a odpovídající řádky z levé tabulky. Pokud pro řádky z pravé tabulky nejsou v levé tabulce relevantní řádky, pak hodnoty ve sloupcích odpovídajících levé tabulce budou NULL.

Externí sloučení se obvykle provádí pomocí příkazu JOIN a klíčového slova ON k zadání podmínek sloučení. Například:

SELECT *FROM table1LEFT OUTER JOIN table2 ON table1.id = table2.id;

V tomto příkladu se provádí externí levé sloučení tabulky table1 s tabulkou table2 podle sloupce id. Výsledná tabulka bude obsahovat všechny řádky z table1 a odpovídající řádky z table2 a hodnoty sloupců table2 budou NULL pro řádky, které v table2 nejsou.

Externí spojení jsou užitečná, když potřebujete získat informace z více tabulek, a to i při absenci relevantních hodnot v jednotných sloupcích. Umožňují vytvářet složitější požadavky a získávat úplné informace z databáze.

LEFT JOIN

Příkaz LEFT JOIN se používá ke sloučení dvou podmíněných tabulek s uložením všech řádků z levé tabulky a pouze příslušných řádků z pravé tabulky. Pokud v pravé tabulce nenajdete odpovídající řádky, budou výsledkem hodnoty NULL pro sloupce v pravé tabulce.

Příklad použití operátora LEFT JOIN:

idname
1John
2Alice
3Bob
iduser_idproduct
11Apple
22Orange

SELECT users.name, orders.product

LEFT JOIN orders ON users.id = orders.user_id;

nameproduct
JohnApple
AliceOrange
BobNULL

Z příkladu je vidět, že všechny řádky z tabulky "users" byly ve výsledku uloženy a byly přidány pouze příslušné řádky z tabulky "orders". Pro uživatele Bob, pro kterého nebyl nalezen žádný odpovídající řádek v tabulce "orders", bude hodnota sloupce "product" NULL.

RIGHT JOIN

Right JOIN vrací všechny řádky z pravé (druhé) tabulky a pouze ty řádky z levé (první) tabulky, které splňují podmínku sloučení. Pokud řádky z pravé tabulky nemají odpovídající řádky v levé tabulce, pak hodnoty pro prázdná pole budou NULL.

Příklad použití right JOIN:

SELECT *FROM Table1RIGHT JOIN Table2 ON Table1.id = Table2.id;

V tomto příkladu budou data sloučena ze dvou tabulek-Table1 a Table2 pomocí podmínky rovnosti hodnoty pole id. Výsledkem bude sada řádků obsahující všechny řádky z Table2 a také pouze ty řádky z Table1, u kterých hodnota pole id odpovídá hodnotě pole id z Table2. Pokud pro nějaký řetězec z Table2 nebude v Table1 odpovídající řádek, pak hodnoty pro pole z Table1 budou NULL.

RIGHT JOIN je užitečný v situacích, kdy potřebujete získat všechny řádky z pravé tabulky, i když pro ně nejsou v levé tabulce relevantní řádky.

FULL JOIN

Operátor FULL JOIN se používá v PostgreSQL ke sloučení dvou tabulek, včetně všech záznamů z obou tabulek. Pokud jsou v tabulkách záznamy, které nemají shodu v jiné tabulce, pak budou také zahrnuty do výsledku.

Syntaxe operátora FULL JOIN:

FULL JOIN table2

Při použití příkazu FULL JOIN v PostgreSQL budou do výsledku zahrnuty všechny řádky z obou tabulek, které nesplňují podmínku sloučení (on condition). Pokud v jedné z tabulek neexistuje odpovídající záznam, všechny hodnoty budou NULL pro tuto tabulku.

Příklad použití operátora FULL JOIN:

FULL JOIN orders

V tomto příkladu kombinujeme tabulky customers a orders podle pole customer_id, abychom získali úplné informace o zákaznících a objednávkách. Výsledek bude obsahovat všechny záznamy z obou tabulek, kde budou uvedeny customer_id, název klienta a order_id. Pokud záznam v jedné z tabulek chybí, odpovídající hodnoty budou NULL.

Operátor FULL JOIN vám tedy umožňuje sloučit tabulky, včetně všech záznamů z obou tabulek, a je užitečný, když potřebujete získat úplné informace ze dvou tabulek, ať už mají shodné záznamy nebo ne.

Samospojení tabulek

Příkladem samospojení tabulek může být dotaz, který najde dvojice zaměstnanců z jednoho oddělení se stejným platem. K tomu lze použít operátor JOIN, který tabulku spojuje se sebou samým.

SELECT a.name AS employee_1, b.name AS employee_2FROM employees a, employees bWHERE a.department = b.departmentAND a.salary = b.salaryAND a.employee_id < b.employee_id;

V tomto příkladu se tabulka employees spojuje sama se sebou (a A b), přičemž se ověřují podmínky: zaměstnanci z jednoho oddělení (a.department = b.department), se stejnou mzdou (a.salary = b.salary) a s různými identifikátory zaměstnanců (a.employe_id < b.employe_id). Výsledkem bude seznam párů zaměstnanců se stejným platem z jednoho oddělení.

Samotné připojení tabulek může být užitečným nástrojem při analýze dat, hledání duplicit nebo provádění složitých dotazů, které vyžadují srovnání dat z jedné tabulky.

JOIN s podmínkou

Ke sloučení řádků tabulek podle konkrétní podmínky se používá klíčové slovo ON. Pokud máte například tabulku "zákazníci" (Customers) a tabulku "objednávky" (Orders) a chcete tyto tabulky sloučit pomocí pole "customer_id" v obou tabulkách, můžete napsat následující dotaz:

SELECT Customers.customer_id, Customers.name, Orders.order_id FROM Customers JOIN Orders ON Customers.customer_id = Orders.customer_id;

V tomto dotazu používáme operátor JOIN ke sloučení tabulek "zákazníci" a "objednávky", což odpovídá hodnotám sloupce "customer_id". Výsledkem bude sada řádků obsahující hodnoty polí "customer_id", "name" z tabulky "klienti" a pole "order_id" z tabulky "objednávky", kde se hodnoty "customer_id" shodují.

JOIN s podmínkou vám umožňuje efektivně kombinovat data z více tabulek pomocí určitých komunikačních podmínek. To je zvláště užitečné při práci s velkým množstvím dat a složitými databázovými strukturami.

JOIN s kombinovanými podmínkami

Join operátor v PostgreSQL umožňuje kombinovat data z různých tabulek na základě určitých podmínek. Kombinované podmínky umožňují zadat několik podmínek pro sloučení dat.

Pro použití kombinovaných podmínek v operátoru JOIN je nutné použít klíčové slovo AND . Chcete-li například sloučit tabulky users a orders s podmínkou, že uživatel provedl objednávku a jeho stav je "dokončen", můžete použít následující požadavek:

SELECT u.name, o.order_dateFROM users uJOIN orders o ON u.id = o.user_idAND o.status = 'completed';

V tomto příkladu vybereme uživatelská jména a data objednávek z tabulek users a orders. Kombinovaná podmínka u.id = o. user_id AND o.status = 'completed' zajišťuje, že budou vybrány pouze dokončené objednávky související s příslušnými uživateli.

Kombinované podmínky v operátoru JOIN v PostgreSQL poskytují flexibilitu a pohodlí při kombinování dat z různých tabulek podle mnoha podmínek najednou. To umožňuje efektivní filtrování dat a získání požadovaných výsledků.