Zunanje združevanje SQL

Zunanje Zdruzevanje Sql



Ni treba posebej poudarjati, da so združevanja ena najbolj prepoznavnih lastnosti relacijskih baz podatkov. Spoji nam omogočajo združevanje podatkov iz ene ali več tabel na podlagi povezanega pogoja, da ustvarimo koherentno podatkovno operacijo.

V SQL obstajajo različne vrste združevanj, od katerih ima vsak edinstven način, kako obravnava podatke iz sodelujočih tabel ali nastalega niza. Eden najpogostejših tipov združevanja v SQL je ZUNANJI ZDRUŽEVANJE.







OUTER JOIN v SQL pridobi vse ujemajoče se vrstice iz vpletenih tabel, pa tudi neujemajoče se vrstice iz ene ali obeh tabel. Pride prav, ko imate opravka s tabelami, ki vsebujejo vrednosti NULL ali manjkajoče nize.



Raziščimo nadalje, kaj ti spoji počnejo, kako delujejo in kako jih lahko uporabimo v zbirki podatkov SQL.



Zahteve:

Za to vadnico bomo delali z MySQL 8.0 in uporabili vzorčno bazo podatkov Sakila. Vendar pa lahko uporabite kateri koli drug nabor podatkov, za katerega menite, da je primeren.





Vrste zunanjih spojev

V SQL obstajajo tri glavne vrste ZUNANJIH ZDRUŽEV. Te vrste OUTER JOINS vključujejo:

  1. Levi ZUNANJI SPOJI

  2. V primeru LEVIH ZUNANJIH SPOJEV združevanje pridobi vse vrstice iz leve tabele in samo ujemajoče se vrstice iz desne tabele. Če iz desne tabele ni ujemajočih se vrstic, združevanje vrne vrednosti NULL za stolpce v desni tabeli.



  3. Desni ZUNANJI SPOJI

  4. To je podobno kot RIGHT OUTER JOIN. Vendar pa pridobi vse vrstice iz desne tabele, le ujemajoče se vrstice iz leve tabele. Če v levi tabeli ni ustreznih vrstic, združevanje vključuje vrednosti NULL za stolpce v levi tabeli.

  5. POLNI ZUNANJI SPOJI

  6. Nazadnje imamo POLNE ZUNANJE SPOJE. Ta vrsta spoja združuje DESNI in LEVI zunanji spoj. Posledično združevanje pridobi vse vrstice, ko obstaja ujemanje v levi ali desni tabeli. Če ujemanja ni, združevanje vrne vrednosti NULL za stolpce iz tabele brez ujemanja.

Sintaksa SQL OUTER JOIN

Naslednje izraža sintakso SQL OUTER JOIN. Vendar je dobro upoštevati, da se sintaksa lahko nekoliko razlikuje glede na ciljni motor baze podatkov.

Sledi splošna struktura:

IZBERI stolpce
IZ tabele 1
[LEVO | PRAV | FULL] OUTER JOIN table2
ON tabela1.ime_stolpca = tabela2.ime_stolpca;

Sintaksa OUTER JOIN v SQL je precej samoumevna.

Primeri:

Oglejmo si nekaj primerov uporabe o tem, kako lahko uporabimo različne vrste ZUNANJIH ZDRUŽEVANJ v SQL.

Kot smo omenili, bomo za predstavitev uporabili vzorčno zbirko podatkov Sakila. V tem primeru uporabljamo tabeli »stranka« in »plačilo«.

Primer 1: LEVI ZUNANJI SPOJ

Začnimo z OUTER JOIN. Recimo, da želimo pridobiti vse podatke o strankah skupaj z njihovimi podatki o plačilu, če so na voljo.

Zaradi tega je LEFT OUTER JOIN uporaben, saj želimo vse podatke o strankah (na levi) in podatke o plačilu, če so na voljo (desno).

Če stranka ni izvedla nobenega plačila, bo združevanje prikazalo vrednosti NULL za stolpce, povezane s plačilom.

Primer je naslednji:

IZBERI
c.customer_id,
c.ime,
c.priimek,
znesek p.,
p.payment_date
OD
stranka c
LEVO ZUNANJE SPAJANJE plačilo str
VKLOP
c.customer_id = p.customer_id;

V podano poizvedbo vključimo stolpce »customer_id«, »first_name« in »last_name« iz tabele »customer«. Vključimo tudi znesek in »payment_date« iz tabele »payment«.

Nato izvedemo LEFT OUTER JOIN med tabelo »customer« in »payment« na podlagi »customer_id«.

To so vse stranke (ne glede na to, ali je bilo plačilo opravljeno ali ne) skupaj z njihovimi podatki o plačilu (če obstajajo).

Primer izhoda je naslednji:

Primer 2: DESNI ZUNANJI SPOJ

Zdaj pa pojdimo na RIGHT OUTER JOIN. Recimo, da želimo v tem primeru vključiti vse podatke o plačilu in povezano stranko, če obstaja.

V tem primeru, če je plačilo opravila stranka, bo pridružitev prikazala podrobnosti te stranke. Če obstaja plačilo brez povezane stranke, bodo prikazane vrednosti NULL za stolpce, povezane s strankami.

IZBERI
c.customer_id,
c.ime,
c.priimek,
znesek p.,
p.payment_date
OD
stranka c
RIGHT OUTER JOIN plačilo str
VKLOP
c.customer_id = p.customer_id;

Nastali niz je naslednji:

Primer 3: POLNI ZUNANJI SPOJ

FULL OUTER JOIN pa po drugi strani pridobi vse podatke o strankah in plačilu. To vključuje vse stranke in vsa plačila ter prikazuje vrednosti NULL, kjer ni ujemanja med tabelami.

IZBERI
c.customer_id,
c.ime,
c.priimek,
znesek p.,
p.payment_date
OD
stranka c
FULL OUTER JOIN plačilo str
VKLOP
c.customer_id = p.customer_id;

Dobro je upoštevati, da MySQL izvorno ne podpira FULL OUTER JOIN. Z LEFT JOIN, UNION in RIGHT JOIN morate narediti nekaj jiujitsu magije. Precej nadležno, lahko dodamo.

Zaključek

V tej vadnici smo izvedeli vse o OUTER JOINS. Naučili smo se, kaj je OUTER JOIN v SQL, vrste OUTER JOINS in primere uporabe teh vrst OUTER JOINS.