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

Che cos'è il CROSS JOIN in SQL?

Che cos'è una CROSS JOIN in SQL e quando si dovrebbe usare? In questo articolo rispondiamo a queste domande e vi forniamo alcuni esempi di CROSS JOIN con cui potete esercitarvi.

Immaginate di stare cercando nel vostro guardaroba delle idee per l'abbigliamento, chiedendovi quale top indossare con quale slip. Quando pensate all'outfit perfetto, immaginate tutti i top e gli slip del vostro armadio combinati tra loro. Questo scenario è simile a quello di SQL CROSS JOIN; una tabella contiene i top e un'altra i fondi, e i dati di entrambe le tabelle vengono combinati per esplorare tutti i possibili abbinamenti.

In questo caso, CROSS JOIN funge da stilista, generando ogni possibile combinazione di righe dai due insiemi di dati. Nell'analogia del guardaroba, una tabella elenca i top e l'altra gli slip. Abbinando ogni top con ogni slip, è possibile creare una varietà di combinazioni di abiti.

Ma che effetto ha questo sull'analisi dei dati e sull'SQL? CROSS JOINs Le tabelle SQL JOIN consentono un'esplorazione completa dei dati creando tutte le possibili combinazioni di set di dati. In questo modo si garantisce che non vengano trascurate potenziali relazioni o interazioni, ottenendo una comprensione più completa delle interconnessioni dei dati.

Ad esempio, in qualità di responsabile marketing di una piattaforma di e-commerce, potreste voler fornire raccomandazioni personalizzate sui prodotti in base alle preferenze dei clienti. L'incrocio dei set di dati relativi ai prodotti e alle preferenze dei clienti produce un elenco completo di raccomandazioni personalizzate per ciascun cliente, migliorando la precisione del marketing e le vendite.

In questo articolo risponderemo a tutte le vostre domande più scottanti sulle CROSS JOIN. Inoltre, vi forniremo degli esercizi per esercitarvi da soli. Se siete alle prime armi con JOINs e volete saperne di più, date un'occhiata al nostro corso completo SQL JOIN, che comprende oltre 90 esercizi pratici su vari tipi di JOIN. Questo corso interattivo vi aiuterà a padroneggiare le JOIN, un'abilità fondamentale per l'analisi dei dati.

Le basi del CROSS JOIN

Per capire l'essenza di un SQL CROSS JOIN, diamo un'occhiata alla sintassi di base:

SELECT *
FROM table1
CROSS JOIN table2;

Scomposizione:

  • SELECT *: Recupera tutte le (*) colonne dalla tabella combinata risultante.
  • FROM table1: Specifica la prima tabella utilizzata nell'operazione CROSS JOIN.
  • CROSS JOIN: Indica che si vuole eseguire un'operazione di cross-join.
  • table2: Specifica la seconda tabella coinvolta nell'operazione CROSS JOIN.

La sintassi è simile a quella di qualsiasi altro SQL JOIN. L'eccezione è che CROSS JOIN non richiede alcuna condizione di unione: combina ogni riga di una tabella con ogni riga di un'altra tabella, indipendentemente da qualsiasi condizione o relazione specifica tra le righe. Per maggiori informazioni su questo argomento, si veda Si possono unire due tabelle senza una colonna comune?

Vediamo ora un esempio completo, utilizzando lo scenario già citato del vostro guardaroba. Per semplificare, immaginate che il vostro guardaroba sia organizzato nelle due tabelle seguenti:

Tops

top_itemcolorsize
sweaterredM
shirtblueM
tank_topwhiteS

Bottoms

bottom_itemcolorsize
jeansblueM
skirtblackS
shortsredS

Query SQL:

SELECT *
FROM Tops
CROSS JOIN Bottoms;

Output:

top_itemcolorsizebottom_itemcolorsize
sweaterredMjeansblueM
sweaterredMskirtblackS
sweaterredMshortsredS
shirtblueMjeansblueM
shirtblueMskirtblackS
shirtblueMshortsredS
tank_topwhiteSjeansblueM
tank_topwhiteSskirtblackS
tank_topwhiteSshortsredS

In questo semplice esempio, CROSS JOIN collega ogni tipo di top a ogni tipo di bottom, consentendo di vedere ogni combinazione di abiti nel vostro guardaroba. Questa funzione consente di pianificare meglio i propri outfit o di sperimentare nuove idee tenendo conto di tutte le possibili combinazioni.

Si noti che, poiché la tabella Tops ha 3 righe e la tabella Bottoms ha 3 righe, la tabella risultante ha 9 (3 volte 3) righe. Questo principio di moltiplicazione si applica a tutte le operazioni di CROSS JOIN. Per ulteriori esempi, consultate la nostra Guida illustrata alle CROSS JOIN di SQL.

Che cos'è un prodotto cartesiano?

Il prodotto cartesiano, un concetto matematico introdotto da René Descartes, è il risultato dell'accoppiamento di ogni elemento di un insieme con ogni elemento di un altro. In sostanza, equivale a creare tutte le possibili combinazioni di due o più insiemi, ottenendo la combinazione degli elementi di ciascuno di essi.

In SQL, l'operazione CROSS JOIN fornisce il prodotto cartesiano tra due tabelle. Combina ogni riga della prima tabella con ogni riga della seconda, ottenendo una nuova tabella in cui ogni riga rappresenta la fusione degli elementi di entrambe le tabelle. In effetti, CROSS JOIN orchestra la generazione di tutte le possibili combinazioni di righe dalle due tabelle, ottenendo il prodotto cartesiano.

Applicazioni pratiche: SQL CROSS JOIN in azione

Ora mettiamo in pratica quanto appreso con alcuni esempi di come CROSS JOIN può aiutare nella gestione dei database.

Esercizio 1: Varianti di prodotto

Contesto:

Il vostro manager vuole ampliare l'offerta di prodotti della piattaforma di e-commerce e offrire ai clienti un'esperienza di acquisto più diversificata. Vi ha dato due tabelle: colors (che contiene vari colori) e sizes (che contiene diverse taglie) per un prodotto specifico. Il vostro compito è quello di combinare i dati di entrambe le tabelle per generare varianti di prodotto complete che includano tutte le colonne di entrambe le tabelle.

Query SQL:

SELECT *
FROM colors
CROSS JOIN sizes;

Risultato della query:

Questa query restituirà tutte le colonne delle tabelle colors e sizes e. Questo esercizio facilita la creazione di varianti di prodotto, consentendo ai clienti di scegliere tra diverse opzioni. La visualizzazione di tutte le possibili combinazioni di colori e taglie migliora l'esperienza di acquisto dei clienti e aumenta la probabilità che questi trovino la variante di prodotto desiderata.

Esercizio 2: Fasce orarie per appuntamenti

Contesto:

Il vostro compito nell'app di prenotazione appuntamenti è quello di programmare in modo efficiente gli appuntamenti. Il vostro manager vi ha fornito tre tabelle:

  • days, che contiene i giorni disponibili sotto la colonna day.
  • times, che contiene tutti gli orari disponibili nella colonna time.
  • employees, che contiene le informazioni sui dipendenti, compresa la colonna employee_name.

Il vostro compito è quello di creare delle fasce orarie complete utilizzando queste tre tabelle con il giorno, l'ora e il nome del dipendente.

Query SQL:

SELECT 
  days.day, 
  times.time, 
  employees.employee_name
FROM days
CROSS JOIN times
CROSS JOIN employees;

Risultato della query:

Questa query restituirà tutte le colonne delle tabelle days, times, e employees e delle tabelle. Questo esercizio aiuta a creare fasce orarie complete tenendo conto di giorni, orari e dipendenti. In questo modo si garantisce una programmazione efficace degli appuntamenti, si ottimizza l'allocazione delle risorse e si migliora il servizio ai clienti.

Esercizio 3: Pacchetto di prodotti per la promozione

Contesto:

In un'attività di vendita al dettaglio, il vostro manager vuole incrementare le vendite promuovendo pacchetti di prodotti interessanti. Vi sono state fornite due tabelle:

  • office_supplies, che contiene le colonne product_id, product_name, price e color.
  • electronics, che contiene le colonne product_id, product_name, price, e brand.

L'obiettivo è creare pacchetti di prodotti interessanti abbinando gli articoli di queste tabelle, con il criterio aggiuntivo che il prezzo del materiale per ufficio deve essere inferiore a 50 dollari. L'output deve includere l'ID del prodotto, il nome e il prezzo per entrambe le categorie.

Query SQL:

SELECT 
  o.product_id AS office_supplies_id, 
  o.product_name AS office_supplies_name, 
  o.price AS office_supplies_price,
  e.product_id AS electronics_id, 
  e.product_name AS electronics_name, 
  e.price AS electronics_price
FROM office_supplies o
CROSS JOIN electronics e
WHERE o.price < 50;

Risultato della query:

Questa query restituisce un set di risultati con l'ID del prodotto, il nome e il prezzo di entrambe le tabelle, con il criterio aggiuntivo che i prodotti per ufficio devono avere un prezzo inferiore a 50 dollari.

Questo elenco completo facilita la creazione di bundle di prodotti interessanti, combinando articoli di diverse categorie e mantenendo al contempo il prezzo dei prodotti per ufficio. Consente ai rivenditori di offrire promozioni in bundle che combinano forniture per ufficio ed elettronica a basso costo, offrendo ai clienti una varietà di soluzioni pratiche. Questo approccio strategico riflette le preferenze dei consumatori e ha il potenziale per aumentare significativamente le vendite e la soddisfazione dei clienti.

Esercizi CROSS JOIN

In questa sezione vengono proposti esercizi interattivi che potete completare da soli utilizzando CROSS JOINs. Ogni esercizio è corredato da un contesto e da tabelle. Provate a risolverli da soli, quindi fate clic per visualizzare le soluzioni. Per assistenza, potete consultare il nostro foglio di istruzioni per le JOIN SQL. Iniziamo:

Esercizio 1: Pianificazione dei pasti

Gestite un servizio che offre ai clienti una serie di piani pasto. Il vostro obiettivo è quello di abbinare i piatti principali con i contorni appropriati, in modo da offrire una varietà di scelte per i pasti.

Date le tabelle che elencano i piatti principali e i contorni disponibili, l'output deve contenere tutte le possibili combinazioni della colonna dish_name dalla tabella mains e la colonna dish_name della tabella side_dishes della tabella.

mains

dish_iddish_name
101Tofu Curry
102Chicken Curry
103Veggie Stir-fry

side_dishes

dish_iddish_name
201Rice
202Chips

Query SQL:

SELECT 
  m.dish_name AS main_dish, 
  s.dish_name AS side_dish
FROM mains m
CROSS JOIN side_dishes s;

Output:

main_dishside_dish
Tofu CurryRice
Tofu CurryChips
Chicken CurryRice
Chicken CurryChips
Veggie Stir-fryRice
Veggie Stir-fryChips

Utilizzando CROSS JOIN per combinare i piatti principali con i contorni appropriati, è possibile creare un'ampia gamma di opzioni per i pasti. Questo approccio consente al servizio di pianificazione dei pasti di fornire più combinazioni ai propri clienti.

Esercizio 2: Assegnazione del progetto

In qualità di project manager, dovete assegnare un dipendente a vari progetti in base al suo stato di formazione. Solo i dipendenti che hanno ricevuto una formazione specializzata possono essere assegnati ai progetti.

Sono disponibili due tabelle, una con l'elenco dei progetti disponibili e l'altra con lo stato di formazione dei dipendenti. Se un dipendente non ha ricevuto la formazione, non può essere assegnato al progetto. Il risultato deve includere l'ID del progetto dalla tabella projects e l'ID e il nome del dipendente dalla tabella employees tabella.

projects

project_idproject_name
101Project X
102Project Y

employees

employee_idemployee_namereceived_training
201JohnYes
202EmilyNo
203SarahYes

Query SQL:

SELECT 
  p.project_id, 
  e.employee_id, 
  e.employee_name
FROM projects p
CROSS JOIN employees e
WHERE e.received_training = 'Yes';

Output:

project_idemployee_idemployee_name
101201John
101203Sarah
102201John
102203Sarah

Utilizzando CROSS JOIN e un filtro appropriato, vengono visualizzate tutte le combinazioni di progetti e i dipendenti con la formazione necessaria.

Esercizio 3: Raccomandazioni di prodotti premium

In qualità di responsabile dell'e-commerce, si desidera consigliare prodotti premium ai clienti con abbonamento Gold e migliorare la loro esperienza di acquisto con offerte esclusive.

Avete due tabelle, una per i clienti e il loro stato di abbonamento e un'altra per i prodotti premium. L'obiettivo è mostrare tutte le possibili combinazioni di clienti che hanno lo stato di abbonamento Gold con prodotti premium, consentendo raccomandazioni personalizzate. L'output deve includere un elenco di tutte le possibili combinazioni di ID cliente, ID prodotto e nome prodotto. Si lavorerà con le seguenti tabelle:

customers

customer_idsuscription_status
111Gold
112Silver
113Bronze
114Gold

premium_products

product_idproduct_name
101Diamond Watch
102Platinum Ring

Query SQL:

SELECT 
  c.customer_id, 
  p.product_id, 
  p.product_name
FROM customers c
CROSS JOIN premium_products p
WHERE c.suscription_status = 'Gold';

Output:

customer_idproduct_idproduct_name
111101Diamond Watch
111102Platinum Ring
114101Diamond Watch
114102Platinum Ring

Utilizzando CROSS JOIN e i filtri, i clienti con uno stato di abbonamento Gold vengono abbinati in modo efficiente ai prodotti premium. In questo modo si facilitano le raccomandazioni personalizzate, che migliorano l'esperienza di acquisto di questi clienti di valore.

Se vi sono piaciuti questi esercizi pratici, date un'occhiata al nostro articolo SQL Joins: 12 domande pratiche con risposte dettagliate, dove troverete altri esercizi utili per migliorare le vostre competenze in SQL!

Considerazioni sulle prestazioni di CROSS JOIN

Quando si utilizza CROSS JOIN in SQL, è fondamentale considerare le implicazioni in termini di prestazioni, soprattutto in considerazione dell'insieme di risultati potenzialmente enorme generato da un'operazione non limitata CROSS JOIN. Questa operazione produce un prodotto cartesiano che cresce esponenzialmente in proporzione alla dimensione delle tabelle di input. Vediamo alcuni suggerimenti per evitare problemi di prestazioni.

  • Limitare le dimensioni delle tabelle di input: Prima di eseguire un CROSS JOIN, raffinare le tabelle di input applicando filtri appropriati. Utilizzare le clausole WHERE o le subquery per restringere il set di dati, riducendo così al minimo il numero di righe da combinare.
  • Applicare ulteriori filtri: Dopo CROSS JOIN, utilizzare condizioni di filtraggio supplementari per affinare ulteriormente l'insieme dei risultati. Questo aiuta a ridurre le dimensioni del risultato finale e a concentrarsi solo sui dati pertinenti, migliorando le prestazioni della query.
  • Considerare tipi di join alternativi: Valutare se una CROSS JOIN senza restrizioni è davvero indispensabile. A seconda dei requisiti specifici, si possono esplorare tipi di join alternativi come INNER JOIN, LEFT JOIN, o RIGHT JOIN, che possono essere più efficienti e più adatti alle proprie esigenze.
  • Ottimizzare l'esecuzione delle query: Assicurarsi che il database sia ottimizzato per un'esecuzione efficiente delle query. L'implementazione di indici, in particolare sulle colonne di join, accelererà le prestazioni, soprattutto quando si gestiscono insiemi di dati estesi.

Incorporando queste considerazioni sulle prestazioni nell'uso di CROSS JOIN, è possibile ridurre le sollecitazioni indebite sul database e garantire un'esecuzione fluida delle query, anche quando si lavora con insiemi di dati estesi.

Volete saperne di più sulle CROSS JOIN di SQL?

In conclusione, CROSS JOIN in SQL è uno strumento utile per creare insiemi di dati completi combinando ogni riga di una tabella con ogni riga di un'altra. Comprendendo i fondamenti di CROSS JOIN e considerando le sue implicazioni in termini di prestazioni, gli analisti possono sfruttare appieno il suo potenziale per esplorare relazioni complesse all'interno di insiemi di dati ed estrarre informazioni preziose.

Per sfruttare appieno le capacità di CROSS JOIN e di altri tipi di SQL JOIN, LearnSQL.it ha creato il corso SQL JOIN corso. Questo corso interattivo include esercizi pratici su vari tipi di JOIN ed è stato progettato per aiutarvi a comprendere le complessità delle operazioni di JOIN.

Sul nostro blog potete leggere anche altri articoli, come Le 10 principali domande di colloquio su SQL JOIN e come rispondere. E non dimenticate il nostro pratico foglio informativo sulle JOIN SQL, sempre disponibile per assistervi nella vostra esplorazione di SQL. Allora, cosa state aspettando? Migliorate le vostre competenze oggi stesso!