Torna all'elenco degli articoli Articoli
Tempo di lettura: 4 minuti

Guida illustrata all'OUTER JOIN di SQL

Abbiamo già parlato di SQL GIUNTA INCROCIATA e JOIN INTERNO e le dichiarazioni. È ora di esplorarne un'altra: OUTER JOIN. Che cos'è? Come funziona? Scopriamolo!

Se avete letto gli altri post, sapete che potete collegare i dati di due o più tabelle di database utilizzando uno dei tanti tipi di operatori di join in SQL. Oggi parleremo dei tre tipi di OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN. Questi operatori uniscono i record in base alla corrispondenza dei valori delle righe, ma lo fanno in modo un po' diverso rispetto alle altre istruzioni di join.

Che cos'è un OUTER JOIN in SQL?

Per rispondere a questa domanda, dobbiamo approfondire i diversi tipi di OUTER JOIN:

  • LEFT OUTER JOIN restituisce ogni record della tabella di sinistra e tutti i record corrispondenti della tabella di destra. Se non viene trovata alcuna corrispondenza, accanto al record non corrispondente viene visualizzato un NULL.
  • RIGHT OUTER JOIN restituisce ogni record della tabella di destra e tutti i record corrispondenti della tabella di sinistra. Se non viene trovata alcuna corrispondenza, accanto al record non corrispondente viene visualizzato un NULL.
  • FULL OUTER JOIN restituisce tutti i record di entrambe le tabelle. Tutti i record non corrispondenti sono abbinati a NULL.

Vediamo ora le tabelle che utilizzeremo per illustrare questi operatori.

La tabella "shirt" ha un solo campo, "color_shirt":

color_shirt
yellow
green
blue

La tabella "pants" ha anch'essa un campo, "color_pants":

color_pants
pink
green
blue

Queste tabelle si spiegano da sole. Immaginatele come due parti di un vestito: il colore dei pantaloni e il colore della camicia. L'idea è quella di trovare camicie e pantaloni con colori identici.

Buono a sapersi: La tabella di sinistra è la prima tabella elencata e si trova dopo la clausola FROM. La tabella di destra è la seconda tabella elencata e si trova dopo la clausola JOIN. Di solito è possibile omettere la parola chiave OUTER in qualsiasi OUTER JOIN - FULL JOIN, LEFT JOIN e RIGHT JOIN funzionano altrettanto bene in molti database (ma controllate la documentazione per esserne certi).

Utilizzo di un LEFT OUTER JOIN

LEFT OUTER JOIN recupera tutti i record dalla prima tabella (sinistra) e li abbina ai record della seconda tabella (destra). Anche i record non corrispondenti della tabella di sinistra vengono selezionati, ma con valori NULL al posto dei record della tabella di destra.

Date un'occhiata all'esempio.

SELECT color_shirt, color_pants 
FROM shirt
LEFT JOIN pants ON color_shirt=color_pants;

La tabella di sinistra (dopo FROM) è "shirt" e la tabella di destra (dopo LEFT JOIN) è "pants". Il predicato ON indica la condizione per abbinare i record di "shirt" con i record di "pants". La condizione è che i valori del campo "shirt"."color_shirt" e quelli del campo "pants"."color_pants" devono corrispondere. Se non c'è corrispondenza, verranno mostrati i record della tabella "shirt", ma viene impostato un valore NULL al posto del record "pants".

Questi sono i risultati della query:

color_shirt color_pants
yellow NULL
green green
blue blue

Ecco un'illustrazione di come funziona questa query e di come appaiono i risultati:

join sinistro

Come si vede, gli abiti verdi e blu sono abbinati. La camicia gialla non ha i pantaloni perché la tabella "pants" non ha campi con il valore "giallo".

Utilizzo di una RIGHT OUTER JOIN

RIGHT OUTER JOIN funziona come LEFT JOIN, ma con una differenza sostanziale: seleziona tutti i record dalla tabella giusta (in questo caso, "pants"). I record della tabella di sinistra ("shirt") vengono mostrati solo se corrispondono.

Guardate la query:

SELECT color_shirt, color_pants 
FROM shirt	
RIGHT JOIN pants ON color_shirt=color_pants;

Ecco il risultato:

color_shirt color_pants
NULL pink
green green
blue blue

Ed ecco l'illustrazione dell'uso di RIGHT JOIN e dei suoi risultati. Sono mostrati tutti i pantaloni, ma non c'è una camicia corrispondente per il paio di pantaloni rosa.

unione a destra

Utilizzo di una FULL OUTER JOIN

Riassumiamo quanto fatto finora. Con LEFT JOIN sono state restituite tutte le camicie e i pantaloni corrispondenti. Con RIGHT JOIN sono stati restituiti tutti i pantaloni e le camicie corrispondenti. Cosa succede se si utilizza FULL OUTER JOIN? Mostra tutti i record di entrambe le tabelle. Se possibile, i record corrispondono; in caso contrario, viene mostrato un NULL al posto del record corrispondente.

Vediamo un esempio di query:

SELECT color_shirt, color_pants 
FROM shirt
FULL  JOIN pants ON color_shirt=color_pants;

Si noti che in un FULL JOIN quale tabella sia a sinistra e quale a destra è trascurabile. Il risultato sarà lo stesso.

Ecco il risultato:

color_shirt color_pants
yellow NULL
green green
blue blue
NULL pink

L'insieme dei risultati contiene tutti i record memorizzati nella tabella "shirt" e nella tabella "pants".

unione completa

L'immagine mostra che FULL JOIN ha restituito tutti i vestiti possibili: tutte le camicie e tutti i pantaloni. Le coppie corrispondenti (verde e blu) sono mostrate insieme, mentre gli articoli non corrispondenti (camicia gialla e pantaloni rosa) sono mostrati separatamente.

Volete saperne di più sulle OUTER JOIN?

C'è ancora molto da scoprire sull'uso delle OUTER JOIN. Per saperne di più, visitate il corso LearnSQL.it' SQL Basics .