Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi ľavým, pravým a úplným vonkajším spojením

Predtým sme diskutovali o rozdieloch medzi Vnútorným Pripojením a Vonkajším Pripojením, kde sme prehĺbili typy vonkajšieho spojenia. Vonkajší spojenie je ten, ktorý vo výsledku zachováva n-tice, ktoré by sa stratili počas operácie spojenia. V tomto článku; budeme diskutovať o rozdieloch medzi typmi vonkajšieho spojenia. Existujú tri typy vonkajšieho spojenia; Ľavý vonkajší spoj, pravý vonkajší spoj a úplné vonkajšie spojenie. Ľavý, pravý a úplný vonkajší spoj sa líši v pláne vykonávania a získaných výsledkoch. Môžeme vynechať vonkajšie slovo z ľavého, pravého a úplného vonkajšieho spojenia. Pozrime sa na rozdiely medzi ľavým, pravým a úplným vonkajším pripojením pomocou porovnávacieho grafu zobrazeného nižšie.

Porovnávacia tabuľka

Základ pre porovnanieĽavý vonkajší spojVpravo vonkajšie spojenieÚplné vonkajšie spojenie
základnéVšetky vety ľavého stola zostávajú vo výsledku.Všetky vety pravého stola zostávajú vo výsledku.Všetky výsledky z ľavého aj pravého stola zostávajú vo výsledku.
Rozšírenie NULLNúky ľavej tabuľky, ktoré nemajú zodpovedajúcu n-tiku v pravej tabuľke, sú rozšírené o hodnotu NULL pre atribúty pravého tabuľky.Nulové hodnoty pravého stola, ktoré nemajú zodpovedajúcu n-tiku v ľavej tabuľke, sú rozšírené o hodnotu NULL pre atribúty ľavej tabuľky.
Nulové hodnoty ľavej a pravej tabuľky, ktoré nemajú zodpovedajúce n-tity v pravom a ľavom stĺpci, sú rozšírené o hodnotu NULL pre atribúty pravého a ľavého tabuľky.

Definícia ľavého vonkajšieho spojenia

Predpokladajme, že máme " Table_A Left Out Join Table_B ". Takže Table_A je naša ľavá tabuľka, ktorá sa javí vľavo od operácie ľavého vonkajšieho spojenia a Tabuľka_B je naša pravá tabuľka.

Spočiatku by bol vnútorný spoj použitý na tableoch A a Table_B, ktoré vrátia všetku zodpovedajúcu n-tiku z tabuľky A a B.

Potom vráti všetky n-tiny z tabuľky Table_A, ktoré nemajú zodpovedajúcu n-ticu v Table_B. Také, že výsledné n-tice by boli vyplnené hodnotami NULL pre atribúty pravého stola.

Preto výsledok získaný z ľavej vonkajšej spojky si zachováva všetky n-tice z ľavého stola a iba zodpovedajúce n-tice z pravého stola.

Diskutujme o ľavej vonkajšej spojke s príkladom; máme dve tabuľky nižšie, Tabuľka študentov a tabuľka oddelení .

Teraz použijeme ľavú vonkajšiu prihlášku, na študentskú a oddelenú tabuľku.

SELECT * FROM Oddelenie študentov LEFT OUTER JOIN
ON Student. Student_ID = Oddelenie.Student_ID

V dotaze vyššie, tabuľka Študent je ľavá tabuľka a tabuľka Oddelenie je správna tabuľka. Takže podľa ľavého vonkajšieho spojenia musí mať výsledok všetky n-tice z tabuľky Študentov a z tabuľky oddelenia iba zodpovedajúce n-tice.

Sledujte výsledok získaný z ľavého vonkajšieho spojenia; má všetky n-tice zo študentskej tabuľky spolu so zodpovedajúcimi n-ticami z tabuľky študentov aj oddelení. Študentský riaditeľ Jimmyho, študentský stôl Jozefa Harryho nebol prítomný v tabuľke oddelení. Hodnoty atribútov tabuľky oddelení pre Jimmyho, Jozefa Harryho sa preto rozšíria na hodnotu NULL.

Definícia pravého vonkajšieho spojenia

Predpokladajme, že máme " Table_A Right Oututer Join Table_B ". Takže Table_A je naša ľavá tabuľka, ako sa zdá, ľavá časť operácie Vonkajšie pripojenie a Table_B je naša pravá tabuľka.

Rovnako ako v ľavom vonkajšom pripojení, spočiatku by vnútorný spoj bol aplikovaný na Table_A a Table_B, ktoré vrátia všetku zodpovedajúcu n- tiku z tabuľky A a B.

Následne vráti všetky tuple z Tabuľky_B, ktoré nemajú zodpovedajúcu n-ticu v Tabuľke_A. Takže výsledné n-tice by boli vyplnené hodnotami NULL pre atribúty ľavej tabuľky.

Z toho vyplýva, že výsledok získaný z pravého vonkajšieho spoja si zachováva všetky n-tice z pravého stola a iba zhodné n-tice z ľavého stola.

Predstavme si pravú vonkajšiu prípojku s príkladom; vyššie máme dve tabuľky, tabuľku študentov a tabuľku oddelení.

Teraz použijeme pravú vonkajšiu prihlášku do tabuľky študentov a tabuliek oddelení.

SELECT * FROM Oddelenie Student RIGHT OUTER JOIN
ON Student. Student_ID = Oddelenie.Student_ID

V dotaze uvedenom vyššie je Študentská tabuľka tabuľkou ľavého stola a tabuľka oddelení je našou správnou tabuľkou. Podľa operácie Vonkajšie spojenie vpravo musí výsledok zahŕňať všetky n-tice z tabuľky oddelení a iba zodpovedajúce n-tice z tabuľky študentov.

Pozorujte výsledok získaný z pravého vonkajšieho spoja; má všetky n-tice z tabuľky oddelení spolu so zodpovedajúcimi n-ticami z tabuľky študentov a oddelení. Študentové ID 10536 a 00954 tabuľky oddelení nie sú v študentskej tabuľke. Preto je hodnota atribútu Name for Student_ID 10536 a 00954 rozšírená na hodnotu NULL.

Definícia úplnej vonkajšej spojky

Predpokladajme, že máme " Table_A Full Outer Join Table_B ". Takže Table_A je naša ľavá tabuľka, pretože sa zdá, že je vľavo z operácie Full Outer Join a Table_B je naša pravá tabuľka.

Full Out Join je kombinácia oboch, ľavého vonkajšieho spojenia a pravého vonkajšieho spojenia . Spočiatku platí vnútorné pripojenie na table_A a table_B na získanie zhody z oboch tabúľ. Potom rozširuje tie n- tiny Table_A s NULL, ktoré nemajú zodpovedajúcu n-ticu v Table_B. Ďalej rozširuje tieto tuple z table_B s NULL, ktoré nemajú zodpovedajúcu n-ticu v Table_A.

Preto Full Outround Join si zachováva všetky n-tice z ľavého aj pravého stola spolu so zodpovedajúcimi n-ticami oboch tabuliek.

Predstavme si príklad "FULL Outer Join". máme dve tabuľky vyššie, tabuľku študentov a tabuľku oddelení .

Teraz použijeme tabuľku Stolárske a oddelenie pre úplné vonkajšie pripojenie k študentom.

SELECT * FROM Oddelenie študentov FULL OUTER JOIN
ON Student. Student_ID = Oddelenie.Student_ID

Vo vyššie uvedenom dotaze je Študentská tabuľka naša ľavá tabuľka a Tabuľka oddelení je našim pravým stolom. Podľa výsledku Full Outer Join, výsledok musí obsahovať všetky n-tice z obidvoch tabuliek.

Pozorujte výsledok získaný z úplného vonkajšieho spoja; má všetky n-tice z tabuľky študentov a oddelení spolu so zodpovedajúcimi n-ticami z tabuľky študentov aj oddelení. Študentka Jimmyho, Jozefa Harryho, tj 10026, 02256, 56362 študentského stola, nebola prítomná v tabuľke oddelení. Hodnoty atribútov tabuľky oddelení pre Jimmyho, Jozefa Harryho sú preto rozšírené na hodnotu NULL . Student_ID 10536 a 00954 tabuľky oddelení nie sú prítomné v stĺpci Student_ID študentskej tabuľky. Preto je hodnota atribútu Atribút Name pre Student_ID 10536 a 00954 rozšírená na hodnotu NULL .

Kľúčové rozdiely medzi ľavým, pravým a úplným vonkajším spojením

  1. Výsledok ľavého vonkajšieho spojenia má všetky ncity ľavého stola. Podobne aj výsledok pravého vonkajšieho spojenia má všetky nódy pravého stola. A výsledok Full Outer Join má všetky n-tity z ľavého i pravého stola.
  2. V ľavom vonkajšom pripojení sú nuly ľavej tabuľky, ktoré nemajú zodpovedajúcu n-tiku v pravej tabuľke, rozšírené o hodnoty Null pre atribúty pravého stola. Naproti tomu je to pravý vonkajší spoj. A v plnom vonkajšom pripojení sú nuly z ľavého a pravého stola, ktoré nemajú zodpovedajúce n-tice v pravom a ľavom strome, rozšírené o NULL pre atribúty pravá a ľavá tabuľka.

záver:

Postavte sa názov tabuľky v dotaze. Keď poloha názvu tabuľky v dopyte rozhodne, či bude tabuľka považovaná za tabuľku vľavo alebo pravú tabuľku.

Top