Join SQL: come collegare dati tra tabelle

operatore Join con linguaggio SQL

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 in SQL è un aspetto importantissimo che chiunque si avvicini al mondo delle query 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  Cl.*, 
        Co.*
FROM    Clienti AS Cl, 
        Conti AS Co
WHERE  
   Cl.IdCliente = Co.IdCliente
   AND Cl. RegioneResidenza = 
                  'Piemonte';

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

SELECT   Cl.*, 
         Co.*
FROM     Clienti AS Cl
INNER JOIN Conti AS Co
      ON Cl.IdCliente = 
           Co.IdCliente
WHERE  Cl.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 in SQL

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 AS c
INNER JOIN SnapshotConto AS 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);

 

INNER JOIN e LEFT JOIN in SQL: query ed esempi

In questo video ti guiderò passo per passo nella scrittura delle prime JOIN in SQL. Vedremo inoltre la differenza tra INNER JOIN e LEFT JOIN

 

In questa presentazione su SlideShare trovi contenuti simili ma esposti con una metodologia differente. Come al solito consiglio la visualizzazione a schermo intero.

 

Join in SQL: e adesso?

SQL Video Academy è il mio percorso di formazione in e-learning pensato per fornirti tutti gli strumenti necessari per diventare un esperto del linguaggio SQL.

Torna su