Join esterno
Il join esterno (outer join) include tutte le tuple di una relazione estese con le tuple dell'altra relazione che rispettano la condizione di join. Gli attributi delle tuple che non rispettano la condizione di join sono riempite con i valori NULL.
Il join esterno è detto
- sinistro (left outer join)
se include tutte le tuple della prima relazione
- destro (right outer join)
se include tutte le tuple della seconda relazione
- completo (full outer join)
se include tutte le tuple della prima e della seconda relazione.
A cosa serve il join esterno? Nell'algebra relazionale l'operatore join esclude tutte le tuple che non rispettano la condizione di join. Questo però comporta una perdita di informazioni. Per questa ragione nel linguaggio SQL è stata aggiunta anche una terza versione di join più flessibile, detta join esterno, inizialmente non prevista nell'algebra relazionale di Copp.
Un esempio pratico
Ho due tabelle R e T con un attributo (b) in comune.
Nel join naturale sono incluse sono le tuple che hanno un valore in comune nell'attributo b.
Tutte la altre tuple di R e T che non rispettano la condizione di join sono escluse.
Nel join esterno sinistro (left outer join) sono incluse tutte le tuple della prima relazione R estese con gli attributi della seconda relazione T che hanno lo stesso valore nell'attributo comune b.
Le tuple di T che non hanno valori in comune nell'attributo b sono incluse con i valori nulli.
Nel join esterno destro (right outer join) sono incluse tutte le tuple della seconda relazione T estese con gli attributi della prima relazione R quando il valore dell'attributo comune coincide.
Se non coincide il valore dell'attributo comune, gli attributi estesi della relazione R sono aggiunti comunque con valori nulli.
Nel join esterno completo (full outer join) sono presenti tutte le tuple del join esterno sinistro e destro senza tuple duplicate.
E così via.