SQL vanjsko spajanje

Sql Vanjsko Spajanje



Nije potrebno spominjati da su spajanja jedna od najprepoznatljivijih značajki relacijskih baza podataka. Spajanja nam omogućuju kombiniranje podataka iz jedne ili više tablica na temelju povezanih uvjeta kako bismo stvorili koherentnu podatkovnu operaciju.

Postoje različite vrste spajanja u SQL-u, od kojih svaka ima jedinstven način na koji obrađuje podatke iz tablica koje sudjeluju ili rezultirajućeg skupa. Jedan od najčešćih tipova spajanja u SQL-u je VANJSKI JOIN.







OUTER JOIN u SQL-u dohvaća sve podudarne retke iz uključenih tablica, kao i nepodudarne retke iz jedne ili obje tablice. Dobro dolazi kada imate posla s tablicama koje sadrže NULL vrijednosti ili skupove koji nedostaju.



Istražimo dalje što ta spajanja rade, kako rade i kako ih možemo koristiti u SQL bazi podataka.



Zahtjevi:

Za ovaj vodič, radit ćemo s MySQL 8.0 i koristiti uzorke baze podataka Sakila. Međutim, slobodno upotrijebite bilo koji drugi skup podataka koji smatrate primjenjivim.





Vrste vanjskih spojeva

Postoje tri glavne vrste OUTER JOIN-ova u SQL-u. Ove vrste VANJSKIH SPOJOVA uključuju:

  1. Lijevi VANJSKI SPOJOVI

  2. U slučaju LIJEVIH VANJSKIH SPOJOVA, spajanje dohvaća sve retke iz lijeve tablice i samo odgovarajuće retke iz desne tablice. Ako nema odgovarajućih redaka iz desne tablice, spajanje vraća NULL vrijednosti za stupce u desnoj tablici.



  3. Desni VANJSKI SPOJOVI

  4. Ovo je slično RIGHT OUTER JOIN-u. Međutim, dohvaća sve retke iz desne tablice, ali samo odgovarajuće retke iz lijeve tablice. Ako nema odgovarajućih redaka iz lijeve tablice, spajanje uključuje NULL vrijednosti za stupce u lijevoj tablici.

  5. POTPUNI VANJSKI SPOJEVI

  6. Na kraju, imamo POTPUNE VANJSKE SPOJEVE. Ova vrsta spoja kombinira i DESNI i LIJEVI vanjski spoj. Kao rezultat toga, spajanje dohvaća sve retke kada postoji podudaranje u lijevoj ili desnoj tablici. Ako nema podudaranja, spajanje vraća NULL vrijednosti za stupce iz tablice bez podudaranja.

Sintaksa SQL OUTER JOIN

Sljedeće izražava sintaksu SQL OUTER JOIN. Međutim, dobro je imati na umu da se sintaksa može neznatno razlikovati ovisno o ciljanom pogonu baze podataka.

Slijedi opća struktura:

SELECT stupce
IZ tablice1
[LIJEVO | DESNO | FULL] OUTER JOIN table2
ON tablica1.naziv_stupca = tablica2.naziv_stupca;

Sintaksa OUTER JOIN-a u SQL-u prilično je jasna sama po sebi.

Primjeri:

Pogledajmo neke primjere korištenja o tome kako možemo primijeniti različite vrste OUTER JOIN-ova u SQL-u.

Kao što smo spomenuli, koristit ćemo Sakila bazu podataka uzoraka za demonstraciju. U ovom slučaju koristimo tablice 'kupac' i 'plaćanje'.

Primjer 1: LIJEVI VANJSKI SPOJ

Počnimo s OUTER JOIN-om. Pretpostavimo da želimo dohvatiti sve podatke o kupcima zajedno s njihovim podacima o plaćanju, ako su dostupni.

Ovo čini LEFT OUTER JOIN primjenjivim jer želimo sve podatke o klijentima (lijevo) i podatke o plaćanju ako su dostupni (desno).

Ako kupac nije izvršio nikakvo plaćanje, spajanje će prikazati NULL vrijednosti za stupce koji se odnose na plaćanje.

Primjer je sljedeći:

IZABERI
c.customer_id,
c.ime,
c.prezime,
p.iznos,
str.datum_plaćanja
IZ
kupac c
LIJEVI VANJSKI SPOJ oplata str
NA
c.customer_id = p.customer_id;

U danom upitu uključujemo stupce “customer_id”, “first_name” i “last_name” iz tablice “customer”. Također uključujemo iznos i 'payment_date' iz tablice 'payment'.

Zatim izvodimo LEFT OUTER JOIN između tablica 'customer' i 'payment' na temelju 'customer_id'.

Ovo su svi kupci (bez obzira jesu li plaćanja izvršena ili ne) zajedno s njihovim podacima o plaćanju (ako postoje).

Primjer izlaza je sljedeći:

Primjer 2: DESNI VANJSKI SPOJ

Sada, prijeđimo na DESNI VANJSKI SPOJ. Pretpostavimo da u ovom slučaju želimo uključiti sve podatke o plaćanju i pridruženog kupca, ako ga ima.

U ovom slučaju, ako plaćanje izvrši kupac, pridruživanje će prikazati pojedinosti tog kupca. Ako postoji plaćanje bez pridruženog kupca, prikazat će NULL vrijednosti za stupce koji se odnose na kupca.

IZABERI
c.customer_id,
c.ime,
c.prezime,
p.iznos,
str.datum_plaćanja
IZ
kupac c
RIGHT OUTER JOIN plaćanje str
NA
c.customer_id = p.customer_id;

Rezultirajući skup je sljedeći:

Primjer 3: POTPUNI VANJSKI SPOJ

FULL OUTER JOIN, s druge strane, dohvaća sve podatke o korisniku i plaćanju. Ovo uključuje sve klijente i sva plaćanja i prikazuje NULL vrijednosti gdje nema podudaranja između tablica.

IZABERI
c.customer_id,
c.ime,
c.prezime,
p.iznos,
str.datum_plaćanja
IZ
kupac c
FULL OUTER JOIN plaćanje str
NA
c.customer_id = p.customer_id;

Dobro je imati na umu da MySQL izvorno ne podržava FULL OUTER JOIN. Morate napraviti malo jiujitsu magije s LIJEVIM JOINOM, UNIONOM i DESNIM JOINOM. Prilično neugodno, mogli bismo dodati.

Zaključak

U ovom vodiču naučili smo sve o VANJSKIM SPOJEVIMA. Naučili smo što je OUTER JOIN u SQL-u, vrste OUTER JOIN-ova i primjere kako koristiti ove vrste OUTER JOIN-ova.