PostgreSQL Vrste spajanja: Unutarnje, Vanjsko, Lijevo, Desno

⚡ Pametni sažetak

PostgreSQL Spojevi dohvaćaju i kombiniraju retke iz dvije ili više tablica pomoću zajedničkog ključa, a uključuju unutarnje spojeve kao što su theta, EQUI i prirodni, plus vanjske spojeve koji pokrivaju lijeve, desne i pune rezultate.

  • 🔗 Kombinirati: Spaja spojene stupce iz više tablica na temelju zajedničkog ključa.
  • 🎯 Unutarnje spajanje: Unutarnji spojevi vraćaju samo retke gdje je uvjet spajanja zadovoljen.
  • ⬅️ Lijevo pridruživanje: LIJEVI VANJSKI SPAJ zadržava svaki lijevi redak tablice, dodajući NULL vrijednosti za neusklađene desne retke.
  • ➡️ Pravo pridruživanje: RIGHT OUTER JOIN zadržava svaki desni redak tablice, dodajući NULL vrijednosti za neusklađene lijeve retke.
  • 🔵 Potpuno pridruživanje: FULL OUTER JOIN vraća sve retke iz obje tablice s NULL vrijednostima gdje ne postoji podudaranje.
  • 🤖 Pomoć za umjetnu inteligenciju: AI asistenti odabiru ispravnu vrstu spajanja i zapisuju uvjet ON.

PostgreSQL Vrste spajanja

U čemu su spojevi PostgreSQL?

PostgreSQL Pridružuje koriste se za dohvaćanje podataka iz više tablica. Pomoću spajanja (Join) možemo kombinirati naredbe SELECT i JOIN u jednu naredbu. Naredbi se dodaje uvjet JOIN i vraćaju se svi retci koji zadovoljavaju uvjete. Vrijednosti iz različitih tablica kombiniraju se na temelju zajedničkih stupaca. Zajednički stupac je uglavnom primarni ključ u prvoj tablici i strani ključ druge tablice.

PostgreSQL Vrste spajanja

Postoje dvije vrste spajanja PostgreSQL:

  • Unutarnji spojevi
  • Vanjski spojevi

PostgreSQL Unutarnje pridruživanje

Postoje 3 vrste unutarnjih spojeva PostgreSQL:

  • Theta spoj
  • Prirodno spajanje
  • Pridružite se EQUI

Theta Pridružite se

Theta spajanje omogućuje spajanje dviju tablica na temelju uvjeta koji predstavlja theta. Theta spojevi mogu raditi sa svim operatorima usporedbe. U većini slučajeva, theta spajanje se naziva unutarnjim spajanjem.

Theta spajanje je najosnovniji tip JOIN-a. Vratit će sve retke iz tablica u kojima je JOIN uvjet zadovoljen.

Sintaksa:

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

Razmotrite sljedeće tablice Demo baze podataka:

Rezervirati:

PostgreSQL Theta Pridružite se

Cijena:

PostgreSQL Theta Pridružite se

Želimo vidjeti naziv svake knjige i odgovarajuću cijenu. Možemo pokrenuti sljedeću naredbu:

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

Ovo će vratiti sljedeće:

PostgreSQL Theta Pridružite se

Samo su 3 retka zadovoljila uvjet spajanja.

EQUI Pridružite se

EQUI spajanje pruža nam način spajanja dviju tablica na temelju odnosa primarni ključ/strani ključ. Na primjer:

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

Ovo će vratiti sljedeće:

PostgreSQL EQUI Pridružite se

Zapisi su vraćeni iz obje tablice na temelju zajedničkih stupaca, odnosno stupca id.

Prirodni spoj

Ova vrsta pridruživanja nam daje još jedan način pisanja EQUI pridruživanja. Možemo poboljšati naš prethodni primjer dodavanjem ključne riječi NATURAL kao što je prikazano u nastavku:

SELECT *
FROM Book
NATURAL JOIN Price;

Ovo će vratiti sljedeće:

PostgreSQL Prirodni spoj

Vraćen je samo jedan ID stupac. NATURAL JOIN je mogao primijetiti da je id stupac zajednički u dvije tablice. Samo je jedan vraćen.

PostgreSQL Vanjsko pridruživanje

Postoje 3 vrste vanjskih spojeva PostgreSQL:

  • Lijevi vanjski spoj
  • Desni vanjski spoj
  • Potpuno vanjsko pridruživanje

PostgreSQL Lijevi vanjski spoj

LEFT OUTER JOIN će vratiti sve retke u tablici na lijevoj strani i samo retke u tablici s desne strane gdje je uvjet spajanja zadovoljen.

Sintaksa:

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

Moramo vidjeti naziv svake knjige i odgovarajuću cijenu. Možemo pokrenuti sljedeću naredbu:

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

Ovo vraća sljedeće:

PostgreSQL Lijevi vanjski spoj

Sva 4 retka u tablici Knjiga su vraćena. Samo 3 retka iz tablice cijena ispunjavaju uvjet spajanja. Stoga su vraćeni. Posljednja knjiga nema odgovarajuću cjenovnu vrijednost.

PostgreSQL Desni vanjski spoj

RIGHT OUTER JOIN vraća sve retke u tablici s desne strane i retke u tablici s lijeve strane gdje je uvjet spajanja zadovoljen.

Sintaksa:

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

Na primjer:

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

Ovo vraća sljedeće:

PostgreSQL Desni vanjski spoj

Vraćeni su svi retci u tablici Cijena. Vraćeni su samo retci u tablici Knjiga koji su zadovoljili uvjet spajanja. Treći redak nema vrijednost za ime jer nije pronađeno podudaranje.

Potpuno vanjsko pridruživanje PostgreSQL

Ova vrsta JOIN će vratiti sve retke u tablici na lijevoj strani i sve retke u tablici na desnoj strani s nulama gdje uvjet spajanja nije zadovoljen.

Sintaksa:

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

Na primjer:

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

Ovo vraća sljedeće:

PostgreSQL Potpuno vanjsko pridruživanje

Svi retci iz svih tablica su vraćeni, s nulama gdje nije pronađeno podudaranje.

Koristeći pgAdmin

Gore navedeni zadaci mogu se izvršiti u pgAdminu na sljedeći način. Sljedeći odjeljci korak po korak opisuju svaku vrstu spajanja.

pgAdmin Unutarnje pridruživanje

U nastavku slijedi prikaz kako pokrenuti svaku varijantu unutarnjeg spajanja u pgAdminu.

Kako koristiti Theta Pridružite se PostgreSQL koristeći pgAdmin

U nastavku su navedeni koraci za korištenje Theta Join-a PostgreSQL koristeći pgAdmin:

Korak 1) Prijavite se na svoj pgAdmin račun

Otvorite pgAdmin i prijavite se koristeći svoje vjerodajnice

Korak 2) Stvorite demo bazu podataka

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin Unutarnje pridruživanje

Korak 3) Upišite upit

Unesite upit u nastavku u uređivač upita:

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

Korak 4) Izvršite upit

Pritisnite gumb Izvrši

pgAdmin Unutarnje pridruživanje

Trebao bi vratiti sljedeće:

pgAdmin Unutarnje pridruživanje

EQUI Pridružite se

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin EQUI Pridružite se

Korak 3) Unesite upit u uređivač upita:

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

Korak 4) Pritisnite gumb Izvrši.

pgAdmin EQUI Pridružite se

Trebao bi vratiti sljedeće:

pgAdmin EQUI Pridružite se

Prirodni spoj

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin Prirodno pridruživanje

Korak 3) Unesite upit u uređivač upita:

SELECT *
FROM Book
NATURAL JOIN Price;

Korak 4) Pritisnite gumb Izvrši.

pgAdmin Prirodno pridruživanje

Trebao bi vratiti sljedeće:

pgAdmin Prirodno pridruživanje

pgAdmin Jednostavno unutarnje spajanje

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin Jednostavno unutarnje spajanje

Korak 3) Unesite upit u uređivač upita:

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

Korak 4) Pritisnite gumb Izvrši.

pgAdmin Jednostavno unutarnje spajanje

Trebao bi vratiti sljedeće:

pgAdmin Jednostavno unutarnje spajanje

pgAdmin vanjsko spajanje

Zatim pokrenite tri varijante vanjskog spajanja u pgAdminu slijedeći dolje navedene korake.

Lijevi vanjski spoj

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin lijevo vanjsko spajanje

Korak 3) Unesite upit u uređivač upita:

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

Korak 4) Pritisnite gumb Izvrši.

pgAdmin lijevo vanjsko spajanje

Trebao bi vratiti sljedeće:

pgAdmin lijevo vanjsko spajanje

Desni vanjski spoj

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin Desno vanjsko spajanje

Korak 3) Unesite upit u uređivač upita:

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

Korak 4) Pritisnite gumb Izvrši.

pgAdmin Desno vanjsko spajanje

Trebao bi vratiti sljedeće:

pgAdmin Desno vanjsko spajanje

Potpuno vanjsko pridruživanje

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  • Na navigacijskoj traci s lijeve strane kliknite Databases.
  • Pritisnite Demo.

pgAdmin Potpuno vanjsko spajanje

Korak 3) Unesite upit u uređivač upita:

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

Korak 4) Pritisnite gumb Izvrši.

pgAdmin Potpuno vanjsko spajanje

Trebao bi vratiti sljedeće:

pgAdmin Potpuno vanjsko spajanje

Preuzmite bazu podataka korištenu u ovom vodiču

Pitanja i odgovori

INNER JOIN vraća samo retke koji se podudaraju u obje tablice. OUTER JOIN također zadržava nepodudarne retke, popunjavajući nedostajuće stupce s NULL i može biti lijevi, desni ili puni ovisno o tome koja se tablica čuva.

JOIN kombinira stupce iz različitih tablica jedan pored drugog koristeći odgovarajući ključ, proširujući svaki redak. UNION slaže retke dvaju skupova rezultata okomito i zahtijeva isti broj stupaca.

Samostalno spajanje spaja tablicu sa samom sobom koristeći dva pseudonima tablice. Koristan je za usporedbu redaka unutar jedne tablice, kao što je usklađivanje zaposlenika s menadžerima pohranjenim u istoj tablici.

CROSS JOIN vraća Kartezijev produkt, uparujući svaki redak prve tablice sa svakim retkom druge. Ne koristi uvjet ON, pa može brzo proizvesti vrlo velike skupove rezultata.

Da. Možete povezati nekoliko JOIN klauzula u jednom upitu, dodajući svakoj dodatnoj tablici još jedan JOIN i ON uvjet. PostgreSQL procjenjuje ih kako bi izgradio jedan kombinirani skup rezultata.

AI asistenti poput GitHub Copilota predlažu ispravnu vrstu spajanja, zapisuju uvjet ON iz stranih ključeva i označavaju nedostajući uvjet koji bi uzrokovao slučajni Kartezijev produkt, smanjujući uobičajene pogreške spajanja.

Da. AI asistenti mogu čitati plan upita, preporučiti indekse na stupcima spajanja i prepisati redoslijed ili uvjete spajanja. Baza podataka i dalje nameće ispravnost, stoga pregledajte svaki prijedlog prije pokretanja u produkciji.

Nijedan pojedinačni spoj nije uvijek najbrži; performanse ovise o indeksima, broju redaka i filterima. UNUTARNJI SPOJEVI na indeksiranim ključevima obično su učinkoviti, dok POTPUNI VANJSKI SPOJEVI na velikim neindeksiranim tablicama obično su najskuplji.

Sažmite ovu objavu uz: