Een normale join verenigt 2 lijsten van rijen met elkaar op basis van een vergelijkbaar attribuut. Ik zal dit de linkerijen en de rechterrijen noemen. Er wordt een cartesisch product van de linker met de rechterrijen gemaakt als tussenresultaat. Daarna wordt dit tussenresultaat uitgedund. Enkel als een linker en een rechter-rij hetzelfde attribuut hebben waarop vergeleken wordt, wordt de desbetreffende rij van het tussenresultaat opgenomen in het eindresultaat.
Code:
[i]personen[/i]
id naam
[COLOR="DarkOrange"]1 Guido
2 Marian
3 Danny
4 Luc
5 Steven[/COLOR]
[i]functies[/i]
pid omschrijving
[COLOR="LemonChiffon"]1 Directeur
2 Werknemer
4 Interim[/COLOR]
SELECT *
FROM ([COLOR="DarkOrange"]personen[/COLOR] JOIN [COLOR="LemonChiffon"]functies[/COLOR] ON id=pid)
[COLOR="DarkOrange"]lijst linkerrijen[/COLOR] / [COLOR="LemonChiffon"]lijst rechterrijen[/COLOR]
geeft
[COLOR="DarkOrange"]1 Guido[/COLOR] [COLOR="LemonChiffon"]1 Directeur[/COLOR]
[COLOR="darkorange"]2 Marian[/COLOR] [COLOR="LemonChiffon"]2 Werknemer[/COLOR]
[COLOR="darkorange"]4 Luc[/COLOR] [COLOR="LemonChiffon"]3 Interim[/COLOR]
Een linkerjoin neemt alle linkerrijen zoiezo op in het eindresultaat. Als het vergelijkbaar attribuut in de linkerrij gelijk is aan dat in de rechterrij, wordt deze rij uit het tussenresultaat op de klassieke manier in het eindresultaat opgenomen. Als een linkerrij nooit opgenomen wordt op voorgaande manier in het eindresultaat, worden er achter de linkerrij zoveel nullwaarden geplakt als de rechterrij atrributen heeft, en wordt deze 'samengeplakte' rij toch nog opgenomen in het eindresultaat.
Code:
[i]personen[/i]
id naam
[COLOR="DarkOrange"]1 Guido
2 Marian
3 Danny
4 Luc
5 Steven[/COLOR]
[i]functies[/i]
pid functie
[COLOR="LemonChiffon"]1 Directeur
2 Werknemer
4 Interim[/COLOR]
SELECT *
FROM ([COLOR="DarkOrange"]personen[/COLOR] LEFT JOIN [COLOR="LemonChiffon"]functies[/COLOR] ON id=pid)
[COLOR="DarkOrange"]lijst linkerrijen[/COLOR] / [COLOR="LemonChiffon"]lijst rechterrijen[/COLOR]
geeft
[COLOR="DarkOrange"]1 Guido[/COLOR] [COLOR="LemonChiffon"]1 Directeur[/COLOR]
[COLOR="darkorange"]2 Marian[/COLOR] [COLOR="LemonChiffon"]2 Werknemer[/COLOR]
[COLOR="darkorange"]3 Danny[/COLOR] [COLOR="LemonChiffon"]NULL NULL[/COLOR] <-- rij die nooit in eindresultaat v. klassieke
join voorkomt, maar nu toch voorkomt omdat
alle linkerrijen moeten opgenomen worden
in het eindresultaat
[COLOR="darkorange"]4 Luc[/COLOR] [COLOR="LemonChiffon"]4 Interim[/COLOR]
[COLOR="darkorange"]5 Steven[/COLOR] [COLOR="LemonChiffon"]NULL NULL[/COLOR] <-- rij die nooit in eindresultaat v. klassieke
join voorkomt, maar nu toch voorkomt omdat
alle linkerrijen moeten opgenomen worden
in het eindresultaat
Een rechterjoin is volledig analoog.