PostgreSQL Typy spojení: Vnitřní, Vnější, Levé, Pravé

⚡ Chytré shrnutí

PostgreSQL Spoje načítají a kombinují řádky ze dvou nebo více tabulek pomocí sdíleného klíče a zahrnují vnitřní spojení, jako jsou theta, EQUI a přirozená spojení, a vnější spojení pokrývající levé, pravé a úplné výsledky.

  • 🔗 Kombajn: Spojuje sloučené sloupce z více tabulek na základě společného klíče.
  • 🎯 Vnitřní spojení: Vnitřní spojení vrací pouze řádky, kde je splněna podmínka spojení.
  • ⬅️ Levé připojení: LEFT OUTER JOIN zachovává každý řádek tabulky zleva a pro neshodné řádky zprava přidává hodnoty NULL.
  • ➡️ Správné připojení: Příkaz RIGHT OUTER JOIN zachovává všechny řádky tabulky vpravo a pro neshodné řádky vlevo přidává hodnoty NULL.
  • 🔵 Úplné připojení: Funkce FULL OUTER JOIN vrací všechny řádky z obou tabulek s hodnotami NULL, kde neexistuje žádná shoda.
  • 🤖 Nápověda s umělou inteligencí: Asistenti umělé inteligence vyberou správný typ spojení a zapíší podmínku ON.

PostgreSQL Typy spojení

Co jsou připojení PostgreSQL?

PostgreSQL Připojuje se používají k načítání dat z více než jedné tabulky. Pomocí operací Join je možné sloučit příkazy SELECT a JOIN do jednoho příkazu. K příkazu je přidána podmínka JOIN a jsou vráceny všechny řádky, které splňují podmínky. Hodnoty z různých tabulek jsou sloučeny na základě společných sloupců. Společný sloupec je většinou primární klíč v první tabulce a cizí klíč druhé tabulky.

PostgreSQL Typy spojení

Existují dva typy připojení PostgreSQL:

  • Vnitřní spoje
  • Vnější spoje

PostgreSQL Vnitřní spojení

Existují 3 typy vnitřních spojení PostgreSQL:

  • Připojte se k Theta
  • Přirozené spojení
  • Připojte se EQUI

Theta Připojte se

Spojení theta umožňuje spojit dvě tabulky na základě podmínky, kterou představuje theta. Theta spojení může fungovat se všemi operátory porovnání. Ve většině případů je theta spojení označováno jako vnitřní spojení.

Theta spojení je nejzákladnějším typem JOIN. Vrátí všechny řádky z tabulek, kde je splněna podmínka JOIN.

Syntaxe:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

Zvažte následující tabulky demo databáze:

Rezervovat:

PostgreSQL Theta Připojte se

Cena:

PostgreSQL Theta Připojte se

Chceme vidět název každé knihy a odpovídající cenu. Můžeme spustit následující příkaz:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Tím se vrátí následující:

PostgreSQL Theta Připojte se

Pouze 3 řádky splnily podmínku spojení.

EQUI Připojte se

Spojení EQUI nám poskytuje způsob, jak spojit dvě tabulky na základě vztahu primární klíč/cizí klíč. Například:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Tím se vrátí následující:

PostgreSQL EQUI Připojte se

Z obou tabulek byly vráceny záznamy na základě společných sloupců, tedy sloupce id.

Přirozené spojení

Tento typ spojení nám poskytuje další způsob psaní spojení EQUI. Náš předchozí příklad můžeme vylepšit přidáním klíčového slova NATURAL, jak je uvedeno níže:

SELECT *
FROM Book
NATURAL JOIN Price;

Tím se vrátí následující:

PostgreSQL Přirozené spojení

Byl vrácen pouze jeden sloupec ID. NATURAL JOIN si všiml, že sloupec id je v obou tabulkách společný. Vrátil se jen jeden.

PostgreSQL Vnější připojení

Existují 3 typy vnějších spojení PostgreSQL:

  • Levý vnější spoj
  • Pravé vnější spojení
  • Úplné vnější připojení

PostgreSQL Levý vnější spoj

LEFT OUTER JOIN vrátí všechny řádky v tabulce na levé straně a pouze řádky v tabulce na pravé straně, kde byla splněna podmínka spojení.

Syntaxe:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

Potřebujeme vidět název každé knihy a odpovídající cenu. Můžeme spustit následující příkaz:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

To vrátí následující:

PostgreSQL Levý vnější spoj

Všechny 4 řádky v tabulce Kniha byly vráceny. Podmínku spojení splnily pouze 3 řádky z tabulky Cena. Proto byli vráceni. Poslední kniha nemá odpovídající cenu.

PostgreSQL Pravé vnější spojení

RIGHT OUTER JOIN vrátí všechny řádky v tabulce na pravé straně a řádky v tabulce na levé straně, kde byla splněna podmínka spojení.

Syntaxe:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

Například:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

To vrátí následující:

PostgreSQL Pravé vnější spojení

Byly vráceny všechny řádky v tabulce Price. Byly vráceny pouze řádky v tabulce Book, které splňovaly podmínku spojení. Třetí řádek neobsahuje žádnou hodnotu pro název, protože nebyla nalezena žádná shoda.

Úplné vnější připojení PostgreSQL

Tento typ JOIN vrátí všechny řádky v tabulce na levé straně a všechny řádky v tabulce na pravé straně s nulami, kde podmínka spojení není splněna.

Syntaxe:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

Například:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

To vrátí následující:

PostgreSQL Úplné vnější připojení

Všechny řádky ze všech tabulek byly vráceny s nulami, kde nebyla nalezena žádná shoda.

Pomocí pgAdmin

Výše uvedené úkoly lze v pgAdmin provést následovně. Následující části krok za krokem popíší jednotlivé typy spojení.

pgAdmin Vnitřní spojení

Níže uvedené kroky ukazují, jak spustit každou variantu vnitřního spojení v pgAdmin.

Jak používat Theta Připojte se PostgreSQL pomocí pgAdmin

Níže jsou uvedeny kroky k použití Theta Join PostgreSQL pomocí pgAdmin:

Krok 1) Přihlaste se ke svému účtu pgAdmin

Otevřete pgAdmin a přihlaste se pomocí svých přihlašovacích údajů

Krok 2) Vytvořte demo databázi

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin Vnitřní spojení

Krok 3) Zadejte dotaz

Do editoru dotazů zadejte níže uvedený dotaz:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Krok 4) Proveďte dotaz

Klepněte na tlačítko Spustit

pgAdmin Vnitřní spojení

Mělo by vrátit následující:

pgAdmin Vnitřní spojení

EQUI Připojte se

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin EQUI Připojte se

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin EQUI Připojte se

Mělo by vrátit následující:

pgAdmin EQUI Připojte se

Přirozené spojení

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin Natural Join

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT *
FROM Book
NATURAL JOIN Price;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin Natural Join

Mělo by vrátit následující:

pgAdmin Natural Join

pgAdmin Jednoduché vnitřní spojení

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin Jednoduché vnitřní spojení

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin Jednoduché vnitřní spojení

Mělo by vrátit následující:

pgAdmin Jednoduché vnitřní spojení

pgAdmin Vnější spojení

Dále spusťte tři varianty vnějšího spojení v pgAdmin pomocí níže uvedených kroků.

Levý vnější spoj

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin vlevo vnější spojení

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin vlevo vnější spojení

Mělo by vrátit následující:

pgAdmin vlevo vnější spojení

Pravé vnější spojení

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin Pravé vnější spojení

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin Pravé vnější spojení

Mělo by vrátit následující:

pgAdmin Pravé vnější spojení

Úplné vnější připojení

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2)

  • Na navigační liště vlevo klikněte na Databáze.
  • Klepněte na tlačítko Demo.

pgAdmin Úplné vnější spojení

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Krok 4) Klepněte na tlačítko Spustit.

pgAdmin Úplné vnější spojení

Mělo by vrátit následující:

pgAdmin Úplné vnější spojení

Stáhněte si databázi použitou v tomto kurzu

Nejčastější dotazy

INNER JOIN vrací pouze řádky, které se shodují v obou tabulkách. OUTER JOIN také zachovává neshodné řádky, chybějící sloupce doplňuje hodnotou NULL a může být levý, pravý nebo plný v závislosti na tom, která tabulka se zachovává.

Operace JOIN kombinuje sloupce z různých tabulek vedle sebe pomocí odpovídajícího klíče a rozšiřuje každý řádek. Operace UNION svisle stohuje řádky dvou výsledných sad a vyžaduje stejný počet sloupců.

Samostatné spojení spojuje tabulku sama se sebou pomocí dvou aliasů tabulky. Je užitečné pro porovnávání řádků v jedné tabulce, například pro porovnávání zaměstnanců s manažery uloženými ve stejné tabulce.

Funkce CROSS JOIN vrací kartézský součin, přičemž každý řádek první tabulky spáruje s každým řádkem druhé tabulky. Nepoužívá žádnou podmínku ON, takže může rychle generovat velmi velké sady výsledků.

Ano. V jednom dotazu můžete zřetězit několik klauzulí JOIN a ke každé další tabulce přidat další podmínku JOIN a ON. PostgreSQL vyhodnotí je za účelem vytvoření jedné kombinované sady výsledků.

Asistenti umělé inteligence, jako je GitHub Copilot, navrhují správný typ spojení, zapisují podmínku ON z cizích klíčů a označují chybějící podmínku, která by způsobila nechtěný kartézský součin, čímž se snižují běžné chyby při spojení.

Ano. Asistenti s umělou inteligencí mohou číst plán dotazů, doporučovat indexy pro sloupce spojení a přepisovat pořadí nebo podmínky spojení. Databáze stále vynucuje správnost, proto si každý návrh před spuštěním v produkčním prostředí zkontrolujte.

Žádné jednotlivé spojení není vždy nejrychlejší; výkon závisí na indexech, počtu řádků a filtrech. VNITŘNÍ SPOJENÍ (INNER JOIN) na indexovaných klíčích jsou obvykle efektivní, zatímco ÚPLNÁ VNĚJŠÍ SPOJENÍ (FULL OUTER JOIN) na velkých neindexovaných tabulkách bývají nejnákladnější.

Shrňte tento příspěvek takto: