operatore Join con linguaggio SQL

Join SQL: come collegare dati tra tabelle

In questo articolo vedremo come scrivere una JOIN con il linguaggio SQL per collegare i dati presenti in più tabelle di un database relazionale. Utilizzare correttamente l’operatore di JOIN è un aspetto importantissimo che chiunque si avvicini al mondo delle query con l’SQL deve imparare a padroneggiare.

 

Join SQL: la sintassi

Anche a causa di ragioni e abitudini storiche, molti programmatori utilizzano una sintassi Sql che, se pur non errata, presenta svantaggi in termini di leggibilità e manutenibilità. Mi riferisco a query in cui la Join è “implicita” come nel seguente esempio:

SELECT  Clienti.*, Conti.*
FROM     Clienti, Conti
WHERE  Clienti.IdCliente = Conti.IdCliente
AND Clienti. RegioneResidenza = ‘Piemonte’

Questa sintassi risulta equivalente alla seguente, dove l’istruzione JOIN è chiaramente esplicitata:

SELECT  Clienti.*, Conti.*
FROM     Clienti
INNER JOIN Conti
    ON Clienti.IdCliente = Conti.IdCliente
WHERE  Clienti. RegioneResidenza = ‘Piemonte’

La seconda sintassi si fa sicuramente preferire per una serie di ragioni, tra cui:

  • leggibilità: ricordiamo che l’SQL è un linguaggio english-Like, la query deve riflettere il modo di esprimersi nel nostro linguaggio naturale. Qui l’obiettivo è collegare le tabelle utilizzando la colonna in comune IdCliente. Per far questo la seconda sintassi è sicuramente più chiara, basta pensare alla traduzione in italiano della parola JOIN. In questo modo teniamo ben distinta la porzione di codice che esplica il collegamento tra le tabelle, da quella dove impostiamo un filtro sui dati (nell’esempio sulla regione di residenza). Nella prima query invece tale distinzione risulta più difficile. Pensate a cosa succede quando la query è più complessa e sono presenti numerosissime join e svariati filtri;
  • manutenitibilità: supponiamo di dover trasformare l’inner join in una left join. Nella seconda query ci basterà modificare una parola! Nel primo caso invece, su molti database occorre riscrivere completamente la query;
  • facilità di scrittura: supponiamo di voler eliminare temporaneamente la join. Nel secondo caso ci basterà commentare le due righe consecutive relative alla tabella conti. Nel primo invece l’operazione risulta sicuramente più complessa e comprende il rischio di commentare per errore anche il filtro sulla regione di residenza.

 

Gestire la presenza di null nelle Join

La presenza di null complica spesso la scrittura di una query soprattutto quando la condizione di JOIN coinvolge più colonne. Supponiamo ad esempio che la tabella dei clienti e dei conti devono essere collegate secondo questa specifica: devono avere lo stesso codice_conto e, se presente, lo stesso codice_valuta. Chi lavora in ambito banking avrà sicuramente riconosciuto questa specifica collegata alla presenza di conti in più valute.

Occorre fare molta attenzione perché la seguente query, all’apparenza corretta, esclude tutti quei conti che hanno NULL nella colonna codice_valuta

SELECT *
FROM    DimConto c
INNER JOIN SnapshotConto s
ON c.codice_conto = s.codice_conto
AND c.codice_valuta = s.codice_valuta

Per risolvere questa fastidiosa situazione, vi lascio un link ad un fantastico articolo di Itzik Ben Gan legato alla gestione del NULL. Vi riporto la soluzione più “elegante”:

SELECT  c.*, s.*
FROM   DimConto c
INNER JOIN SnapshotConto s
ON exists (SELECT c.codice_conto, c.codice_valuta
INTERSECT
SELECT s.codice_conto, s.codice_valuta)

 

Come scrivere una JOIN

In questa presentazione su SlideShare spiego dall’inizio la logica da seguire per scrivere correttamente una join. Come al solito consiglio la visualizzazione a schermo intero.

 

Join con l’SQL: e adesso?

Se vuoi seguire un percorso completo sui database relazionali visita la pagina del mio corso introduttivo a SQL.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Torna su