Consideriamo una seconda tabella, SEDI:
| ID | NOME | CITTA |
| 10 | DIREZIONE | MILANO |
| 20 | RICERCA | ROMA |
| 30 | SVILUPPO | ROMA |
Che e’ in relazione con la tabella IMPIEGATI tramite la colonna id.
Ricordo che la tabella impiegati e’:
| MATRICOLA | NOME | COGNOME | SUPERIORE | DATA_ASS | SALARIO | SEDE |
| 0001 | MARIO | ROSSI | 12-12-1990 | 5000000 | 10 | |
| 0123 | PAOLO | VERDI | 0001 | 23-11-1992 | 3500000 | 10 |
| 0234 | MARIO | BIANCHI | 0123 | 26-02-1995 | 2100000 | 20 |
Quindi per estrarre il nome, il cognome e la citta’ in cui il dipendente lavora, ho bisogno di estrarre i dati da due tabelle.
Una possibile select potrebbe essere:
SELECT nome,cognome,citta FROM IMPIEGATI,SEDI;
In questo caso otterrei nove record, cioe’ il prodotto fra le due tabelle, vediamo il perche’.
In una select di questo tipo Oracle procede in questo modo: estrae nome e cognome dal primo record della tabella impiegati e li associa con la colonna citta della tabella sedi, in questo modo ottiene tre record, questo perche’ nell’istruzione non c’e’ scritto di associare al record la citta’ il cui id corrisponde a quello della coppia nome, cognome. La stessa cosa capita per i successivi record, ottenendo cosi’ nove record estratti, il prodotto delle due tabelle.
L’associazione corretta la si ottiene con una where:
SELECT nome,cognome,citta FROM IMPIEGATI,SEDI
WHERE sede=id;
Abbiamo effettuato una JOIN fra le due tabelle.
In questo modo quando viene estratta la prima coppia nome, cognome viene associata alla citta’ corretta. Attenzione che se nella tabella esistessero id uguali, magari per citta’ differenti, la coppia nome,cognome verrebbe estratta piu’ volte, associata a citta’ differenti; ma questo e’ un problema di progettazione del database (che vedremo piu’ avanti) e non una limitazione dell’istruzione select.

654








