Quanti di voi continuano ad usare lo standard SQL dell’89 senza tenere presente il nuovo standard che prevede, tra le altre cose l’utilizzo della Join? A giudicare dal codice molti… e la risposta più frequente è “non serve….”.
Partiamo da un presupposto, a livello di prestazioni non cambia nulla e neanche di “possibilità “… cioè tutto quello che si poteva fare prima si puo fare adesso… allora perchè imparare un costrutto nuovo se non mi da nulla in più? La risposta è LEGGIBILITA’… quando in Java5 uscì il costrutto foreach tutti, o quasi, i programmatori si affrettarono ad usare questo nuovo metodo che rendeva il codice molto più leggibile… non è vero??? Lo stesso sarebbe dovuto valere per la Join ma questo non è successo forse per la poca conoscenza dello standard… facciamo un esempio concreto:
Abbiamo due tabelle
Impiegato(Id, Nome, Cognome, Gruppo)
Gruppo(Id, Nome)
Prima query tutti i nomi degli impiegati ed il nome del gruppo di appartenenza:
WHERE
select Impiegato.Nome, Gruppo.Nome
from Impiegato, Gruppo
where Gruppo.Id = Impiegato.Gruppo
JOIN
select Impiegato.Nome, Gruppo.Nome
from Impiegato inner join Gruppo on Gruppo.Id = Impiegato.Gruppo
Voi direte: “non è che ci sia tutta questa differenza……” facciamo pero un nuovo assunto, un Impiegato può anche non far parte di nessun gruppo e voi volete la stessa lista di prima…. per far “apparire” anche gli impiegati “solitari” sarete costretti a scrivere:
select Impiegato.Nome, Gruppo.Nome grupName
from Impiegato, Gruppo
where Gruppo.Id = Impiegato.Gruppo
union
select Impiegato.Nome, null grupName
from Impiegato
where Impiegato.Gruppo IS NULL
con la Join un semplice:
select Impiegato.Nome, Gruppo.Nome
from Impiegato left outer join Gruppo on Gruppo.Id = Impiegato.Gruppo
Ora qual’è più leggibile e facile da comprendere??? e questo è un esempio idiota…. aggiungete una decina di tabelle in join e una manciata di clausole where “VERE” e avrete la percezione del perchè usare la JOIN….
enjoy, :-D