Join (SQL)

La JOIN è una clausola del linguaggio SQL che serve a combinare le tuple di due o più relazioni di una base di dati. Lo standard ANSI definisce alcune specifiche per il linguaggio SQL sul tipo di JOIN da effettuare: INNER JOIN, FULL JOIN, LEFT JOIN e RIGHT JOIN, alle quali diversi DBMS…

La JOIN è una clausola del linguaggio SQL che serve a combinare le tuple di due o più relazioni di una base di dati. Lo standard ANSI definisce alcune specifiche per il linguaggio SQL sul tipo di JOIN da effettuare: INNER JOIN, FULL JOIN, LEFT JOIN e RIGHT JOIN, alle quali diversi DBMS aggiungono CROSS JOIN. In alcuni casi è possibile che una tabella possa essere combinata con se stessa, in questo caso si parlerà di self-join.

Tabelle di esempio

Tutti gli esempi che verranno riportati di seguito faranno uso delle seguenti due tabelle:

Dipartimenti.ID_dipartimento è la chiave primaria che ha una cardinalità 0:n nei confronti del campo Impiegati.ID_dipartimento.

Nota: Il dipartimento Promozione della tabella Dipartimenti non ha alcuna corrispondenza nella tabella Impiegati. Mentre l'impiegato Grassi non è stato assegnato ad alcun dipartimento (NULL).

Inner join

Una INNER JOIN crea una nuova tabella combinando i valori delle due tabelle di partenza (A e B) basandosi su una certa regola di confronto. La query compara ogni riga della tabella A con ciascuna riga della tabella B cercando di soddisfare la regola di confronto definita. Quando la regola di join viene soddisfatta, i valori di tutte le colonne delle tabelle A e B vengono combinate in un'unica riga nella costruzione della tabella risultante. La INNER JOIN è la forma di join usata più di frequente nelle applicazioni e rappresenta la modalità predefinita.

Per esempio, la seguente query unirà le due tabelle Impiegati e Dipartimenti usando la chiave primaria ID_dipartimento che è la colonna presente in entrambe le tabelle. Quando ID_dipartimento corrisponde in entrambe le tabelle (ovvero la regola è soddisfatta), la query combinerà le colonne Cognome, ID_dipartimento e Nome_dipartimento in un'unica riga per la tabella risultante.

Esempio di INNER JOIN in forma esplicita:

che equivale a:

Risultato della query di INNER JOIN:

Nota: l'impiegato Grassi e il dipartimento Promozione non sono presenti in quanto l'impiegato Grassi ha un NULL mentre Promozione non compare in nessun impiegato. A volte come risultato finale si desidera avere anche i record che non hanno corrispondenza: in tal caso è possibile usare la query di tipo OUTER JOIN.

Equi-join

La equi-join, noto come "l'unica operazione ammissibile", ha un particolare tipo di comparatore, detto theta join, che utilizza come metodo di verifica, solamente l'uguaglianza matematica come regola di confronto. Usare altri operatori di confronto (come ad esempio <) squalifica la join come equi-join. La query riportata di seguito utilizza una equi-join:

SQL fornisce una scorciatoia per definire le equi-joins, attraverso la parola riservata USING

La keyword USING è supportata da Microsoft SQL Server Management Studio, MySQL, Oracle, PostgreSQL, SQLite, e DB2/400.

Natural join

Una NATURAL JOIN offre ulteriori specializzazioni di equi-join. Solitamente la JOIN confronta colonne di tabelle diverse che hanno lo stesso nome. La NATURAL JOIN fa proprio questo.

Nell'esempio che segue viene riportata la notazione NATURAL JOIN equivalente alla prima INNER JOIN definita:

Cross join

Una CROSS JOIN, cartesian join o product fornisce le basi (le infrastrutture informatiche) attraverso cui tutti i tipi di INNER JOIN operano. Il risultato di una CROSS JOIN è il prodotto cartesiano di tutte le righe delle tabelle che concorrono alla query di join. È come dire che stiamo facendo una INNER JOIN senza impostare la regola di confronto o in cui la regola di confronto ritorna sempre vero.

Date le due tabelle di partenza A e B, la cross join si scrive A × B.

Esempio di CROSS JOIN esplicito:

Altro esempio implicito di CROSS JOIN:

Outer join

Una OUTER JOIN non richiede che ci sia corrispondenza esatta tra le righe di due tabelle. La tabella risultante da una outer join trattiene tutti quei record che non hanno alcuna corrispondenza tra le tabelle. Le OUTER JOIN si suddividono in LEFT OUTER JOIN, RIGHT OUTER JOIN, e FULL OUTER JOIN, in base a quale sia la tabella di cui intendiamo trattenere i valori in caso di mancata corrispondenza della regola di confronto da (sinistra, destra, o entrambi). In questo caso left (sinistra) e right (destra) si riferiscono ai due lati della keyword JOIN.

Nota sulle clausole WHERE e ON

Si sottolinea come esista un ordine di esecuzione tra le condizioni specificate nella WHERE e quelle presenti nella ON.

Specificatamente le clausole presenti nella ON sono valutate anteriormente all'esecuzione della JOIN mentre le clausole nella WHERE sono valutate successivamente all'esecuzione della JOIN.

Left outer join

Il risultato di una query LEFT OUTER JOIN (o semplicemente LEFT JOIN) per le tabelle A e B contiene sempre tutti i record della tabella di sinistra (left) A, mentre vengono estratti dalla tabella di destra (right) B solamente le righe che trovano corrispondenza nella regola di confronto della join. Questo significa che se la clausola ON trova zero righe in B, la JOIN mostrerà una riga risultante con valore NULL in tutte le colonne corrispondenti al risultato per le colonne di B.

Esempio di una left outer join:

Servizi correlati

Altre voci

P

PunBB

PunBB è un sistema libero per la gestione di forum, sviluppato in PHP e distribuito con licenza GNU General Public License.

Leggi la voce →
P

Programmazione orientata agli aspetti

La programmazione orientata agli aspetti è un paradigma di programmazione basato sulla creazione di entità software — denominate aspetti — che sovrintendono alle interazioni fra oggetti finalizzate a eseguire un compito comune. Il vantaggio rispetto alla tradizionale programmazione orientata…

Leggi la voce →
C

Collaudo del software

Il collaudo del software (anche software testing in lingua inglese), in informatica, indica un procedimento, che fa parte del ciclo di vita del software, utilizzato per individuare le carenze di correttezza, completezza e affidabilità delle componenti software in corso di sviluppo. Consiste…

Leggi la voce →
SQL injectionS

SQL injection

Nella sicurezza informatica SQL injection è una tecnica di command injection, usata per attaccare applicazioni che gestiscono dati attraverso database relazionali sfruttando il linguaggio SQL. Il mancato controllo dell'input dell'utente permette di inserire artificiosamente delle stringhe di…

Leggi la voce →
Interfaccia graficaI

Interfaccia grafica

L'interfaccia grafica, nota anche come GUI (dall'inglese graphical user interface), in informatica è un tipo di interfaccia utente che consente l'interazione uomo-macchina in modo visuale utilizzando rappresentazioni grafiche (es. widget) piuttosto che utilizzando i comandi tipici di…

Leggi la voce →
SAP Business OneS

SAP Business One

SAP Business One è un'applicazione ERP (Enterprise Resource Planning) progettata per le piccole e medie imprese e commercializzata dalla società tedesca SAP SE. Come azienda, SAP Business One si concentra sull'automazione delle funzioni aziendali chiave in finanza, management control, acquisti,…

Leggi la voce →