PostgreSQL Typy spojení s příklady: Vnitřní, Vnější, Levý, Pravý

Co jsou připojení PostgreSQL?

PostgreSQL Připojuje se používají pro získávání dat z více než jedné tabulky. S Joins je možné spojit příkazy SELECT a JOIN do jediného 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 kombinovány 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.

Vnější spojení Postgres

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

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

Postgres Left Outer Join

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

Postgres Left Outer Join

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.

Postgres Right Outer Join

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

Postgres Right Outer Join

Všechny řádky v tabulce Ceny byly vráceny. Byly vráceny pouze řádky v tabulce Kniha, které splnily podmínku spojení. 3rd řádek nemá žá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í:

Postgres Full Outer Join

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ě:

pgAdmin Vnitřní spojení

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

Níže jsou uvedeny kroky pro použití Theta Join v Postgres 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

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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í

Levý vnější spoj

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

Krok 2)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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)

  1. Na navigační liště vlevo klikněte na Databáze.
  2. 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í

Shrnutí

  • In PostgreSQL, používáme JOINy, když potřebujeme získat hodnoty z více než jedné tabulky.
  • INNER JOIN je nejzákladnějším typem JOIN. Vrátí všechny záznamy, kde byla splněna zadaná podmínka JOIN.
  • LEFT OUTER JOIN vrátí všechny řádky v levé tabulce a pouze řádky v druhé tabulce, kde byla splněna podmínka spojení.
  • RIGHT OUTER JOIN vrátí všechny řádky v tabulce vpravo a pouze řádky v druhé tabulce, kde byla splněna podmínka spojení.
  • Tento typ JOIN vrátí všechny řádky v levé tabulce a všechny řádky v pravé tabulce s nulami, kde podmínka spojení není splněna.

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