SQL Subquery Join with Outer Query

Sql Subquery Join With Outer Query



Ko gre za delo z relacijskimi bazami podatkov, morate obvladati, kako manipulirati in kombinirati poizvedbe za izvajanje nalog, ki jih želite. Zato vsak mehanizem relacijske baze podatkov implementira svoj okus jezika SQL tako, da poskuša svojim uporabnikom zagotoviti izjemne lastnosti, učinkovitost in enostavnost uporabe.

Ena najmočnejših lastnosti SQL so podpoizvedbe. Podpoizvedbe so nabor ugnezdenih poizvedb znotraj večje in bolj zapletene poizvedbe. Podpoizvedbe vam omogočajo, da pridobite podatke ali izvedete bolj zapletene operacije kot ena sama entiteta.







Podpoizvedbe lahko uporabimo za filtriranje podatkov, razvrščanje, združevanje v več tabelah in več.



Vendar pa je druga funkcija, ki je skrita pod podpoizvedbami SQL, znana kot spoji podpoizvedb. Te so podobne podpoizvedbam; namesto tega so spoji, ki vam omogočajo uporabo podpoizvedb znotraj zunanje poizvedbe za združevanje tabel.



Če se vam vrti v glavi, ne skrbite, saj je združevanje podpoizvedb lahko izziv za obvladovanje, zlasti na začetku. Vendar ta vadnica poskuša razčleniti združevanja podpoizvedb v osnovnih korakih, ne da bi preveč prepustili naključju.





Upoštevajte, da predvidevamo, da niste novi v SQL, združevanjih SQL, podpoizvedbah SQL ali podobnim. Če pa ste, preverite naše vadnice o temah, da odkrijete več.

Obvladajte zunanje spoje SQL

Če želite razumeti, kako delati s spoji podpoizvedb, je učenje dela z zunanjimi spoji ključni dejavnik.



Če niste seznanjeni, vam zunanje združevanje SQL omogoča pridobivanje vseh vrstic iz ene tabele in ustreznih vrstic iz druge tabele. Je nekoliko bolj zapleteno od tega, vključno z levim zunanjim spojem, desnim zunanjim spojem, popolnim zunanjim spojem itd.

V levem zunanjem združevanju SQL poizvedba vrne vse vrstice iz leve tabele in ustrezne vrstice iz desne tabele. Poizvedba vključuje vrednosti NULL v nastale stolpce, če v desni tabeli ni ustreznih vrstic.

V primeru desnega zunanjega združevanja vrne poizvedba vse vrstice iz desne tabele, vendar le ujemajoče se vrstice iz leve tabele. Podobno poizvedba vključuje vrednosti NULL, če v levi tabeli ni ustreznih vrstic.

Končno imamo celoten zunanji spoj. To združevanje vrne vse vrstice iz desne in leve tabele ter vrednosti NULL za vse neujemajoče se zapise.

Spoji podpoizvedbe SQL

Zdaj, ko razumemo podpoizvedbe SQL, se pogovorimo o združitvah podpoizvedb. Združevanja podpoizvedb nam omogočajo uporabo podpoizvedb znotraj zunanje poizvedbe za združevanje tabel.

Če sprašujete, je to to? Da, to je vse, kar počnejo združevanja podpoizvedb.

Za boljši prikaz tega vzemite naslednji primer sintakse, ki je prikazan v naslednjem:

IZBERI *
IZ tabele 1
LEVI ZUNANJI SPOJ (
IZBERI stolpec1, stolpec2
IZ tabele 2
) Podpoizvedba AS
ON table1.column3 = subquery.column1;


V prejšnji sintaksi izberemo vse stolpce iz tabele ena z uporabo levega zunanjega spoja, da ga združimo s podpoizvedbo. Vloga podpoizvedbe je pridobiti definirane stolpce iz tabele 2. Nato jo združimo s tabelo 1 pod pogojem stolpca 2 iz tabele 1 in stolpca 1 iz podpoizvedbe.

Praktični primer:

Teoretično se zdi manj intuitivno, vendar si vzemimo scenarij iz resničnega sveta z uporabo baze podatkov Sakila.

Recimo, da želimo pridobiti seznam vseh filmov v bazi podatkov in njihove ustrezne jezike. Jeziki filmov so shranjeni v jezikovni tabeli, imena filmov pa so shranjena v filmski tabeli.

Vendar ima filmska tabela tuji ključ, imenovan stolpec »language_id« iz jezikovne tabele. Zato lahko uporabimo združevanje podpoizvedbe z levim zunanjim združevanjem, da združimo dve tabeli skupaj, kot je prikazano v naslednji poizvedbi:

IZBERITE f.naslov, l.ime KOT jezik
IZ filma f
LEVI ZUNANJI SPOJ (
IZBERI jezik_id, ime
IZ jezika
) KOT l
ON f.language_id = l.language_id;


V prejšnjem primeru poizvedbe smo iz tabele filma izbrali stolpec z naslovom in iz tabele z jeziki stolpec z imenom.

Nato uporabimo podpoizvedbo, da iz tabele jezikov izberemo language_id in stolpec z imenom. Naslednji korak je, da ga združimo s filmsko tabelo pod pogojem, da je language_id iz filmske tabele enak language_id iz jezikovne tabele.

Da bi zagotovili, da so vsi filmi vključeni v rezultat, moramo uporabiti levi zunanji spoj, ki je sestavljen iz vseh rezultatov iz leve tabele, ki je v tem primeru tabela filmov.

Primer izhoda je naslednji:


Enako lahko storimo tudi z desnim zunanjim spojem. Sintaksa je naslednja:

IZBERI *
IZ tabele 1
DESNI ZUNANJI SPOJ (
IZBERI stolpec1, stolpec2
IZ tabele 2
) Podpoizvedba AS
ON table1.column3 = subquery.column1;


To se obnaša podobno, vendar vključuje vse zapise v desni tabeli, tudi če ni ujemajočih se zapisov.

Koristne stvari, ki jih morate vedeti

Dobro je razumeti, da čeprav so spoji podpoizvedb izjemno uporabni in lahko optimizirajo vaš potek dela, jih uporabljajte previdno.

Na primer, izogibajte se uporabi združevanj podpoizvedbe z velikim naborom podatkov. To je zato, ker lahko vrnejo obsežne zapise, ki lahko vplivajo na delovanje baze podatkov.

Razmislite o uporabi orodij za analizo poizvedbe, preden izvedete kakršna koli združevanja podpoizvedbe.

Zaključek

Ta vadnica je raziskala osnove dela s podpoizvedbami in spoji podpoizvedb v SQL. Na koncu te vadnice zdaj razumete, kako delati z združitvami podpoizvedb, zakaj jih boste morda morali uporabiti, in praktičen primer, kako vam lahko pomagajo pri poteku dela.