Notranji spoj proti zunanjemu spoju
Notranje združevanje in Zunanje združevanje sta dve od metod združevanja SQL, ki se uporabljata pri obdelavi poizvedb za baze podatkov. Spadajo v družino klavzul združevanja (druga dva sta leva in desna združevanja). Vendar pa obstaja Self Join, ki ga je mogoče uporabiti za posebne situacije. Namen funkcije Join je združiti polja z uporabo skupnih vrednosti v dve tabeli. Ti spoji združujejo zapise iz več tabel v bazi podatkov. Ustvari končne nize, ki jih je mogoče shraniti kot drugo tabelo.
Kaj je notranje združevanje?
Najpogosteje uporabljena operacija združevanja SQL je notranja združitev. Lahko se šteje za privzeto vrsto združevanja, ki se uporablja v aplikacijah. Notranje združevanje uporablja predikat za združevanje za združevanje dveh tabel. Ob predpostavki, da sta tabeli A in B, bo predikat za združevanje primerjal vrstici A in B, da bi ugotovil vse pare, ki izpolnjujejo predikat. Vrednosti stolpcev vseh zadovoljnih vrstic tabel A in B se združijo, da se ustvari rezultat. Na to lahko gledamo tako, da najprej vzamemo navzkrižno združevanje (kartezični produkt) vseh zapisov in nato vrnemo samo zapise, ki izpolnjujejo predikat združevanja. Vendar v resnici kartezični produkt ni izračunan, ker je zelo neučinkovit. Namesto tega se uporablja zgoščeno združevanje ali združevanje razvrščanja-spojitve.
Kaj je zunanje združevanje?
Za razliko od notranjega združevanja, zunanje združevanje hrani vse zapise, tudi če ne najde ujemajočega se zapisa. To pomeni, da zunanje združevanje potrebuje zapis, da najde ujemajoči se zapis, da se prikaže v rezultatu. Namesto tega bo vrnil vse zapise, vendar bodo imeli neujemajoči se zapisi ničelne vrednosti. Zunanji spoji so razdeljeni v tri podkategorije. So levi zunanji spoj, desni zunanji spoj in polni zunanji spoj. To razlikovanje temelji na tem, katera vrstica tabele (leva tabela, desna tabela ali obe tabeli) se ohrani, ko so najdeni neujemajoči se zapisi. Leva zunanja združevanja (znana tudi kot preprosto levo združevanje) ohranijo vse zapise leve tabele. To pomeni, da tudi če je število ujemajočih se zapisov nič, bo še vedno imela zapise v tabeli rezultatov, vendar bo imela ničelne vrednosti za vse stolpce B. Z drugimi besedami, vse vrednosti iz leve tabele so vrnjene z ujemajočimi se vrednostmi iz desne. tabelo (ali ničelne vrednosti, če se ne ujemajo). Če se vrednosti iz več vrstic iz leve tabele ujemajo z eno vrstico iz desne tabele, se bo vrstica iz desne tabele po potrebi ponovila. Desni zunanji spoj je precej podoben levemu zunanjemu spoju, vendar je obravnava tabel spoštovana. To pomeni, da bo rezultat imel vse vrstice desne tabele vsaj enkrat z ujemajočimi se vrednostmi leve tabele (in ničelne vrednosti za neujemajoče se desne vrednosti). Popolna zunanja združitev je bolj celovita kot leva in desna zunanja združitev. Posledica tega je združevanje učinka uporabe levega in desnega zunanjega spoja.
Kakšna je razlika med notranjim združevanjem in zunanjim združevanjem?
Notranje združevanje ne ohrani neujemajočih se vrstic v rezultatu, zunanje združevanje pa bo ohranilo vse zapise iz vsaj ene tabele (odvisno od tega, katero zunanje združevanje je bilo uporabljeno). Torej je vedenje, da v tabeli z rezultati ni prisotnih nobenih informacij o neujemajočih se vrsticah, nezaželeno, zato morate vedno uporabiti eno od zunanjih združevanj (namesto notranjega združevanja). Notranje združevanje morda ne bo dalo rezultata, če ni najdenih ujemanj. Toda zunanje združevanje bo vedno ustvarilo rezultantno tabelo, tudi brez ujemajočih se vrstic. Notranje združevanje bo vedno vrnilo tabele z vrednostmi (če je vrnjeno). Toda zunanja združevanja lahko povzročijo tabele z ničelnimi vrednostmi.