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

Guida illustrata alla funzione CROSS JOIN di SQL

Che cos'è un'istruzione SQL CROSS JOIN? Quando è opportuno utilizzarla? Quando non si dovrebbe usare? In questo post vi spiegheremo cosa c'è da sapere sulle CROSS JOIN.

Sapete già che potete usare l'istruzione SQL JOIN per unire una o più tabelle che condividono un record corrispondente. E se avete letto il post LearnSQL's Learning SQL JOINs Using Real Life Situations, sapete che ci sono molti tipi di JOINs. Quale sceglierete dipenderà da ciò che volete fare.

Ce n'è uno JOIN che non usiamo spesso, ma che ha uno scopo molto specifico: CROSS JOIN. In questo articolo spiegherò cosa fa e come funziona una CROSS JOIN. Spiegherò anche quando è opportuno usarne una e quando no.

Che cos'è una JOIN?

Per prima cosa, esaminiamo cosa fa JOIN in SQL: consente di combinare i dati (cioè i record) di più tabelle. Gli operatori di JOIN consentono di unire i record in modi specifici, ad esempio solo i record che hanno una corrispondenza in entrambe le tabelle.

Per iniziare a esplorare CROSS JOIN, inizieremo a lavorare con due tabelle, "color" e "tshirt".

La tabella "color", che memorizza i nomi dei colori delle magliette disponibili, si presenta così:

id name
1 yellow
2 green
3 pink

La tabella "tshirt", che contiene le taglie delle varie magliette, si presenta così:

id size
1 S
2 M
3 L
4 XL

Le persone indossano magliette in tutte le combinazioni di taglie e colori. Quindi uniremo i dati di queste tabelle.

Che cos'è una CROSS JOIN?

CROSS JOIN restituisce un prodotto cartesiano, ovvero tutti i record uniti a tutti i record di tutte le tabelle. Non c'è alcuna condizione JOIN (cioè nessuna clausola ON). Il numero di record risultante è uguale al numero di righe della prima tabella moltiplicato per il numero di righe della seconda tabella. CROSS JOIN è usato molto raramente. Poiché produce tutte le possibili combinazioni di record da tutte le tabelle, può essere un'operazione pericolosa per le tabelle che contengono molti record.

Abbiamo le nostre due tabelle, mostrate di seguito. Utilizziamo CROSS JOIN su di esse e vediamo cosa succede:

tshirt
id size
1 S
2 M
3 L
4 XL
color
id name
1 yellow
2 green
3 pink









SELECT *  FROM  tshirt
CROSS JOIN  color;

Notate che una tabella è elencata dopo la clausola FROM; il nome dell'altra tabella segue CROSS JOIN Non importa quale tabella sia elencata dopo la clausola from e quale dopo la clausola CROSS JOIN. I risultati saranno gli stessi: tutte le possibili combinazioni di record da tutte le tabelle.

Ecco il risultato di questa operazione:

id size id name
1 S 1 yellow
2 M 1 yellow
3 L 1 yellow
4 XL 1 yellow
1 S 2 green
2 M 2 green
3 L 2 green
4 XL 2 green
1 S 3 pink
2 M 3 pink
3 L 3 pink
4 XL 3 pink

Abbiamo selezionato tutti i record della tabella "tshirt" e uniamo ogni record con tutti quelli della tabella "color". In altre parole, abbiamo la combinazione di ogni maglietta in ogni taglia con ogni colore. Il grafico seguente spiega visivamente questo aspetto:

GIUNTA INCROCIATA

Altri modi per ottenere prodotti cartesiani

Esiste un altro modo per ottenere una query che restituisca un prodotto cartesiano senza utilizzare CROSS JOIN:

SELECT *  FROM  tshirt, color ;

In questo caso, le tabelle che si desidera unire devono essere elencate dopo la clausola FROM . Si noti che utilizzando *, si selezionano tutti i record di entrambe le tabelle. L'insieme dei risultati sarà uguale a quello dell'esempio CROSS JOIN.

Utilizzo di CROSS JOIN nella moltiplicazione

È possibile utilizzare CROSS JOIN anche per eseguire una moltiplicazione. Utilizziamo due tabelle che memorizzano alcuni numeri di base per vedere come funziona. Per prima cosa, date un'occhiata alle tabelle:

"t1"

n
11
12
13

"t2"

n
11
12
13

Entrambe le tabelle memorizzano gli stessi numeri: 11, 12, 13. Il nostro obiettivo è moltiplicare questi numeri tra loro, creando una sorta di tabella di moltiplicazione. Per farlo, possiamo utilizzare la funzione CROSS JOIN. Guardate la query qui sotto:

SELECT t1.n, t2.n, t1.n*t2.n AS result  FROM  t1
CROSS JOIN  t2 ;

SELECT elenca tre colonne: i numeri della prima tabella (t1.n), i numeri della seconda tabella (t2.n) e la moltiplicazione memorizzata nella colonna del risultato (t1.n*t2.n AS result). La tabella seguente mostra il risultato:

t1.n t2.n result
11 11 121
11 12 132
11 13 143
12 11 132
12 12 144
12 13 156
13 11 143
13 12 156
13 13 169

Utilizzo di CROSS JOIN con molte tabelle

Possiamo utilizzare più di due tabelle in una CROSS JOIN. Immaginiamo che un'azienda produca magliette in tre taglie (S, M, L) e in due tessuti (cotone e lino). Ogni maglietta è disponibile in due colori: rosa o blu. Date un'occhiata alle seguenti tabelle:

"colore"

id name
1 blue
3 pink

"maglietta"

id size
1 S
2 M
3 L

"tessuto"

id name
1 cotton
2 linen

Supponiamo ora di voler vedere tutte le magliette possibili: ogni combinazione di taglia, colore e tessuto. La query sottostante recupera queste informazioni utilizzando una CROSS JOIN su tre tabelle:

SELECT tshirt.size as size, color.name AS color, fabric.name as fabric
FROM  tshirt 
CROSS JOIN  fabric
CROSS JOIN  color ;

Ecco il risultato:

size color fabric
S blue cotton
M blue cotton
L blue cotton
S pink cotton
M pink cotton
L pink cotton
S blue linen
M blue linen
L blue linen
S pink linen
M pink linen
L pink linen

Ci sono dodici possibili magliette. I due colori moltiplicati per le tre taglie e ancora per i due tessuti danno come risultato 12.

Per saperne di più

C'è molto di più da sapere sull'uso di CROSS JOIN di quanto abbiamo trattato in questa introduzione illustrata. Se volete saperne di più su JOIN, date un'occhiata al corso SQL Basics di LearnSQL.