Inner Join en Outer Join


In SQL, a toetreden wordt gebruikt om - letterlijk join - te vergelijken en te combineren en specifieke rijen gegevens uit twee of meer tabellen in een database te retourneren. Een innerlijke join vindt en retourneert overeenkomende gegevens uit tabellen, terwijl een outer join vindt en retourneert overeenkomende gegevens en sommige ongelijksoortige gegevens uit tabellen.

Inner Join

Een inner join is gericht op de overeenkomst tussen twee tabellen. Wanneer u een inner join gebruikt, moeten er ten minste enkele overeenkomende gegevens zijn tussen twee (of meer) tabellen die worden vergeleken. Een innerlijke join zoekt tabellen voor overeenkomende of overlappende gegevens. Na het vinden, combineert de inner join en geeft de informatie terug in een nieuwe tabel.

Voorbeeld van Inner Join

Laten we eens kijken naar een gemeenschappelijk scenario van twee tabellen: productprijzen en hoeveelheden. De algemene informatie in de twee tabellen is de productnaam, dus dat is de logische kolom om aan de tabellen deel te nemen op. Er zijn enkele producten die in de twee tabellen voorkomen; andere zijn uniek voor een van de tabellen en hebben geen overeenkomst in de andere tabel.

Een innerlijke join op producten retourneert informatie over alleen die producten die in beide tabellen voorkomen.

Outer Join

Een outer join retourneert een set records (of rijen) die bevatten wat een inner join zou retourneren, maar bevat ook andere rijen waarvoor geen overeenkomstige match wordt gevonden in de andere tabel.

Er zijn drie soorten outer joins:

  • Left Outer Join (of Left Join)
  • Right Outer Join (of Right Join)
  • Volledige externe join (of volledige join)

Elk van deze outer joins verwijst naar het deel van de gegevens dat wordt vergeleken, gecombineerd en geretourneerd. Soms worden in dit proces nullen geproduceerd omdat sommige gegevens worden gedeeld terwijl andere gegevens dat niet zijn.

Left Outer Join

Een linker outer join retourneert alle gegevens in tabel 1 en alle gedeelde gegevens (dus het binnenste gedeelte van het Venn-diagramvoorbeeld), maar alleen overeenkomstige gegevens uit tabel 2, wat de juiste join is.

Left Join Voorbeeld

In onze voorbeelddatabase zijn er twee producten - sinaasappels en tomaten - aan de 'linkerkant' (prijzen tabel) die geen overeenkomstige vermelding aan de rechterkant hebben (tabel Hoeveelheden). In een linkse join worden deze rijen opgenomen in de resultatenset met een NULL in de kolom Aantal. De andere rijen in het resultaat zijn hetzelfde als de binnenste join.

Rechts Outer Join

Een rechter outer join retourneert de gegevens van tabel 2 en alle gedeelde gegevens, maar alleen overeenkomstige gegevens uit tabel 1, die de linker join is.

Right Join Voorbeeld

Net als bij het voorbeeld van de linker join, bevat de uitvoer van een rechter outer join alle rijen van de inner join en twee rijen - broccoli en squash - van de 'right' (hoeveelheden tabel) die geen overeenkomende items aan de linkerkant hebben.

Volledige Outer Join

Een volledige outer join of volledige join, dat is niet ondersteund door het populaire MySQL databasebeheersysteem, combineert en retourneert allemaal gegevens uit twee of meer tabellen, ongeacht of er gedeelde informatie is. Denk aan een volledige join door simpelweg alle gespecificeerde informatie te dupliceren, maar in één tabel, in plaats van meerdere tabellen. Wanneer overeenkomende gegevens ontbreken, worden null-waarden geproduceerd.

Dit zijn slechts de basis, maar veel dingen kunnen gedaan worden met joins. Er zijn zelfs joins die andere joins kunnen uitsluiten!

Video die innerlijke versus externe joins verklaart

Deze video legt het verschil uit tussen verschillende soorten joins. Het wordt in de cue gezet om te beginnen op het punt waar de discussie over joins begint.

Referenties

  • Verschil tussen innerlijke en uiterlijke join - Stapel overloop
  • SQL Inner Join - Quackit
  • SQL Outer Join - Quackit
  • Innerlijke joins gebruiken - Microsoft SQL Server
  • Outer joins gebruiken - Microsoft SQL Server
  • Visuele weergave van SQL-joins - CodeProject
  • Wikipedia: Join (SQL)