Inner Join versus Outer Join
Inner join en Outer join zijn twee van de SQL-verbindingsmethoden die worden gebruikt in queryverwerking voor databases. Ze behoren tot de familie van join-clausules (andere twee zijn links en rechts joins). Er is echter een Self Join die kan worden gebruikt voor gespecialiseerde situaties. Het doel van Join is om velden te combineren met behulp van de gemeenschappelijke waarden in de twee tabellen. Deze joins combineren records uit meerdere tabellen in een database. Hiermee worden resulterende sets gemaakt die kunnen worden opgeslagen als een andere tabel.
Wat is Inner Join?
Meest gebruikte SQL Join-bewerking is de inner join. Het kan worden beschouwd als het standaardtype join dat wordt gebruikt in toepassingen. Innerlijke join gebruik het join-predikaat om twee tabellen te combineren. Ervan uitgaande dat de twee tabellen A en B zijn, zal het joinpredikaat rijen A en B vergelijken om alle paren te vinden die voldoen aan het predicaat. Kolomwaarden van alle tevreden rijen van A- en B-tabellen worden gecombineerd om het resultaat te creëren. Er kan worden gekeken als eerst de kruising (Cartesiaans product) van alle records en vervolgens alleen de records die voldoen aan het joinpredicaat. In werkelijkheid wordt het Cartesiaanse product echter niet berekend omdat het erg inefficiënt is. In plaats daarvan wordt Hash join of join voor sorteren samenvoegen gebruikt.
Wat is Outer Join?
In tegenstelling tot Inner join, houdt outer join alle records bij, zelfs als het geen overeenkomende record kan vinden. Dat betekent dat outer join een record nodig heeft om een overeenkomend record te vinden zodat het in het resultaat verschijnt. In plaats daarvan worden alle records geretourneerd, maar niet-overeenkomende records hebben nulwaarden. Externe joins zijn onderverdeeld in drie subcategorieën. Ze hebben de outer join, de rechter outer join en de volledige outer join. Deze differentiatie is gebaseerd op de rij van de tabel (linker tabel, rechtertabel of beide tabellen) wordt behouden wanneer ongeëvenaarde records worden gevonden. Left outer joins (ook bekend als gewoon links join) behoudt alle records van de linker tabel. Dat betekent dat, zelfs als de records voor getallenvergelijking nul is, deze nog steeds records in de resultaattabel heeft, maar null-waarden voor alle kolommen van B zal hebben. Met andere woorden, alle waarden uit de linkertabel worden geretourneerd met overeenkomende waarden van rechts tabel (of null-waarden bij niet-overeenkomende). Als waarden uit meerdere rijen uit de linker tabel worden vergeleken met een enkele rij uit de rechter tabel, wordt de rij van de rechter tabel indien nodig herhaald. Rechts outer join lijkt vrijwel op linker outer join, maar behandeling van tabellen wordt vereerd. Dat betekent dat het resultaat ten minste één keer alle rijen met rechtertabellen heeft met overeenkomende linkse tabelwaarden (en nulwaarden voor niet-overeenkomende rechtwaarden). Volledige outer join is uitgebreider dan zowel links als rechts outer joins. Het resulteert in het combineren van het effect van het samen voegen van zowel de linker- als de rechter buitenzijde.
Wat is het verschil tussen Inner Join en Outer Join?
Inner Join houdt de niet-overeenkomende rijen in het resultaat, maar de outer join houdt alle records uit minstens één tabel (afhankelijk van welke outer join is gebruikt). Dus het gedrag van het hebben van geen informatie aanwezig op niet-overeenkomende rijen in de resultatentabel is ongewenst, je moet altijd een van de outer joins gebruiken (in plaats van inner join). Innerlijke join levert mogelijk geen resultaat op als er geen overeenkomsten worden gevonden. Maar outer join zal altijd een resulterende tabel opleveren, zelfs zonder bijpassende rijen. Inner join retourneert altijd tabellen met waarden (indien geretourneerd). Maar uiterlijke joins kunnen resulteren in tabellen met lege waarden.