Sisäinen liittyminen vs. ulkoliitos
Inner join ja Outer join ovat kaksi SQL-liitosmenetelmää, joita käytetään tietokantojen kyselyn käsittelyssä. Ne kuuluvat join-lauseiden perheeseen (kaksi muuta ovat vasen ja oikea liitos). On kuitenkin olemassa Self Join, jota voidaan käyttää erikoistilanteissa. Join-toiminnon tarkoitus on yhdistää kenttiä kahteen taulukkoon yhteisillä arvoilla. Nämä liitokset yhdistävät tietueita useista tietokannan taulukoista. Se luo tuloksena olevia joukkoja, jotka voidaan tallentaa toiseksi taulukoksi.
Mikä on Inner Join?
Yleimmin käytetty SQL Join -toiminto on Inner Join. Sitä voidaan pitää sovelluksissa käytetyn oletusliitoksen tyyppinä. Inner join käyttää liitospredikaattia kahden taulukon yhdistämiseen. Olettaen, että kaksi taulukkoa ovat A ja B, liitospredikaatti vertaa A:n ja B:n rivejä löytääkseen kaikki predikaatin täyttävät parit. Kaikkien A- ja B-taulukoiden tyydyttyneiden rivien sarakearvot yhdistetään tuloksen luomiseksi. Voidaan katsoa, että ensin otetaan kaikkien tietueiden ristiliitos (Carteesinen tulo) ja palautetaan sitten vain liitospredikaatin täyttävät tietueet. Todellisuudessa karteesista tuotetta ei kuitenkaan lasketa, koska se on erittäin tehoton. Sen sijaan käytetään tiivistettyä liitosta tai lajittele yhdistämistä.
Mikä on Outer Join?
Toisin kuin sisäinen liitos, ulompi liitos säilyttää kaikki tietueet, vaikka se ei löydä vastaavaa tietuetta. Tämä tarkoittaa, että ulompi liitos tarvitsee tietueen löytääkseen vastaavan tietueen, jotta se näkyy tuloksessa. Sen sijaan se palauttaa kaikki tietueet, mutta vastaamattomilla tietueilla on nolla-arvot. Ulkoliitokset on jaettu kolmeen alaluokkaan. Ne ovat vasen ulompi liitos, oikea ulkoliitos ja täysi ulkoliitos. Tämä erottelu perustuu siihen, minkä taulukon rivi (vasen taulukko, oikea taulukko tai molemmat taulukot) säilytetään, kun täsmäämättömiä tietueita löytyy. Vasemmanpuoleiset ulkoliitokset (tunnetaan myös nimellä yksinkertaisesti vasemman liitos) säilyttävät kaikki vasemman taulukon tietueet. Tämä tarkoittaa, että vaikka numeroa vastaavat tietueet olisivat nolla, sillä on silti tietueita tulostaulukossa, mutta sillä on nolla-arvot kaikille B:n sarakkeille. Toisin sanoen kaikki vasemman taulukon arvot palautetaan vastaavilla arvoilla oike alta. taulukko (tai nolla-arvot, jos niitä ei ole). Jos arvot useilta riveiltä vasemmasta taulukosta yhdistetään yhden rivin kanssa oikeasta taulukosta, oikeanpuoleisen taulukon rivi toistetaan tarpeen mukaan. Oikea ulompi liitos on melko samanlainen kuin vasen ulompi liitos, mutta taulukoiden käsittelyä kunnioitetaan. Tämä tarkoittaa, että tuloksessa on kaikki oikeanpuoleisen taulukon rivit vähintään kerran vastaavilla vasemmanpuoleisilla taulukoilla (ja nolla-arvoilla täsmäämättömien oikeanpuoleisten arvojen kanssa). Täysi ulkoliitos on kattavampi kuin sekä vasen että oikea ulkoliitos. Sen tuloksena yhdistyy sekä vasen että oikea ulkopuoli liitettynä yhteen.
Mitä eroa on sisäliitoksen ja ulkoliitoksen välillä?
Sisäinen liitos ei säilytä tuloksen vertaamattomia rivejä, mutta ulompi liitos säilyttää kaikki tietueet vähintään yhdestä taulukosta (riippuen siitä, mitä ulkoliitosta on käytetty). Joten käyttäytyminen, jossa tulostaulukon vastaamattomilla riveillä ei ole tietoa, ei ole toivottavaa, sinun on aina käytettävä jotakin uloimmista liitoksista (sisäliitoksen sijasta). Sisäinen liitos ei välttämättä tuota tulosta, jos osumia ei löydy. Mutta ulompi liitos tuottaa aina tuloksena olevan taulukon, vaikka vastaavia rivejä ei olisikaan. Sisäinen liitos palauttaa aina taulukot arvoineen (jos palautetaan). Mutta ulommat liitokset voivat johtaa taulukoihin, joissa on nollaarvoja.