Logo Informatizzati

Ti è mai capitato di voler unire due o più tabelle e non ottenere il risultato sperato? In questo articolo cerchiamo di spiegare le join con gli insiemi.

Prendi due tabelle A e B

tabella A
id dipartimento
1 architettura
2 economia
3 storia
4 scienze
5 filosofia
tabella B
Nome id_dipartimento
Gino 1
Pino 2
Maria 3
Rosa 5

e immagina che siano 2 insiemi

insiemi insiemi_aree

Intersecando i due insiemi otteniamo una zona condivisa (verde) e due aree separate (gialla e azzurra), i diversi tipi di join si occupano di selezionare queste aree estrapolando diversi gruppi di risultati.


INNER JOIN

In base all'esistenza o meno della condizione (WHERE), la inner join restituisce solo i record verificati esistenti in entrambe le tabelle, tutte quelle righe che non hanno corrispondenza verranno escluse.

Per fare un esempio pensiamo una query di questo tipo:

SELECT * FROM tabellaA INNER JOIN tabellaB ON tabellaA.id_dipartimento = tabellaB.id

Il risultato è:

id
dipartimento nome
id_dipartimento
1 architettura Gino 1
2 economia Pino 2
3 storia Maria 3
5 filosofia Rosa 5

Il dipartimento di scienze non ha iscritti, quindi non è stato considerato. Nel caso degli insiemi viene preso in considerazione solo la porzione che si sovrappone.

inner_join

 

OUTER JOIN

La outer join restituisce tutti i record che non corrispondono alle chiavi di ricerca. E' il contrario della inner join.

Questo è solo un concetto, perchè verrebbero estratti solo risultati non corrispondenti visualizzati con una serie di NULL. In realtà si usa insieme a left o right diventando left outer join o right outer join.

Nel caso degli insiemi viene selezionato tutto quello che sta al di fuori dall'intersecazione.

outer_join

 

LEFT OUTER JOIN (RIGHT OUTER JOIN)

Questo tipo di selezione si ottiene mettendo insieme il concetto di inner join e outer join. Il risultato che si ottiene è la selezione di tutti i record della tabella A che corrispondono con la tabella B, più i record della tabella A che non corrispondono. I record che non corrispondono vengono valorizzati a NULL

Esiste anche la right outer join ma normalmente non si usa e per ottenere lo stesso risultato si cambia l'ordine delle tabelle. A volte è possibile omettere il termine OUTER, quindi rimane semplicemente LEFT o OUTER JOIN

Vediamo l'esempio

SELECT * FROM tabellaA LEFT JOIN TabellaB ON tabellaA.id_dipartimenti = tabellaB.id

Il risultato è:

id
dipartimento
nome id_dipartimento
1 architettura Gino 1
2 economia Pino 2
3 storia Maria 3
4 scienze NULL NULL
5 filosofia Rosa 5

In questo caso anche la riga "scienze" è stata inserita,ma dal momento che non ci sono iscritti viene inserito NULL nel campi non corrispondenti.

Il disegno con gli insiemi appare così:

left_join

Commenti offerti da CComment