Mettere in collegamento (join) delle tabelle significa interrogare contemporaneamente (fare un "prodotto cartesiano") di due o più tabelle al fine di conoscere quei dati che, provenendo da queste, sono fra loro relazionati.
Finora abbiamo utilizzato query che interrogavano una sola tabella, SQL ci pemette di visualizzare colonne di dati provenienti da più tabelle, ovviamente relazionate fra loro. Nella clausola FROM
della SELECT
includeremo i nomi di tutte le tabelle coinvolte dall'interrogazione "join". La clausola WHERE
servirà ad imporre la condizione di filtro dei dati fra le tabelle correlate.
Equijoin
Il modo più semplice per eseguire un'operazione di join fra due tabelle è quello di utilizzare l'operatore di uguaglianza (=), non a caso viene volutamente definita anche come equi-join. La sua particolarità è quella di combinare le righe fra due tabelle aventi in comune i valori delle colonne specificate con WHERE
.
Abbiamo discusso del vincolo FOREIGN KEY
(chiave esterna) progettando anche due tabelle, Padre e Figlio, relazionate fra loro mediante la colonna IDPadre
, presente in ambedue le tabelle e del medesimo datatype. Rimettiamoci nella situazione in cui ogni padre possedeva 2 figli ed eseguiamo la join tra le tabelle Padre e Figlio.
SQL> SELECT padre.idpadre, nominativo, nome, figlio.datanascita 2 FROM padre, figlio 3 WHERE padre.idpadre = figlio.idpadre;
Con l'equi-join abbiamo interrogato contemporaneamente le tabelle Padre e Figlio per visualizzare tutti gli oggetti della tabella Padre relazionati ai rispettivi oggetti della tabella Figlio. Come possiamo notare l'operatore di uguaglianza è stato impiegato con la clausola WHERE
. Con la precedente query abbiamo selezionato:
- idpadre, colonna in comune ad ambedue le tabelle ed è per questo motivo che dobbiamo necessariamente specificare la tabella di appartenenza;
- nominativo, non anteponiamo il nome della tabella (Padre) perché non esiste alcuna colonna nella tabella Figlio con la medesima denominazione, pertanto Oracle sa che deve selezionare quella della tabella Padre;
- nome, non anteponiamo il nome di tabella (Figlio) perché non esiste alcuna colonna nella tabella Padre con la medesima denominazione;
- datanascita: esiste un'altra colonna con lo stesso nome nella tabella Padre ed è per questo che anteponiamo il nome di tabella (Figlio). In questo esempio ci interessa visualizzare la data di nascita dei figli e non dei padri.
Con la clausola FROM
abbiamo elencato i nomi delle tabelle poste in join, mentre con la clausola WHERE
abbiamo indicato la condizione di join.