Cross join e prodotti cartesiani
Usi CROSS JOIN consapevolmente per creare combinazioni e eviti esplosioni cartesiane accidentali dovute a chiavi di join mancanti
Cross join e prodotti cartesiani è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Che cos'è un cross join?
Un CROSS JOIN produce ogni combinazione possibile di righe: m × n righe di output. Non include una clausola ON.
SELECT * FROM a CROSS JOIN b;
-- Equivalent:
SELECT * FROM a, b; -- comma join, no conditionProdotti cartesiani accidentali
Il bug classico: si dimentica la condizione di JOIN e ogni riga di A viene associata a ogni riga di B.
SELECT u.email, o.id
FROM users u, orders o; -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!Casi d'uso intenzionali
CROSS JOIN è utile quando desidera realmente tutte le coppie:
- Combinazioni di categorie × periodi temporali per report con intervalli vuoti
- Dati di test: ogni utente × ogni prodotto
- Calendari: ogni negozio × ogni data
Esempio di calendario × negozi
Inserisca anche i giorni con zero vendite per ogni negozio:
SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;Prodotti cartesiani ed EXPLAIN
Un prodotto cartesiano non intenzionale appare come un numero enorme di righe in EXPLAIN ANALYZE:
EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop (rows=10000000) ← warning signLATERAL: cross join condizionale
LATERAL JOIN è simile a un CROSS JOIN, ma consente al lato destro di fare riferimento al lato sinistro; lo vedrà nella prossima lezione.
Permutazioni e combinazioni
Per ottenere coppie (A,B) senza duplicati, aggiunga un confronto nella clausola ON:
SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)CROSS JOIN con VALUES
Inserisca inline un insieme ridotto:
SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);Evitare la sintassi con join tramite virgola
Il join implicito con la virgola (FROM a, b) è valido, ma nasconde l'intento. Preferisca un CROSS JOIN esplicito:
-- Don't (looks like a typo):
FROM users, orders
-- Do:
FROM users CROSS JOIN ordersPrestazioni
CROSS JOIN in sé è economico: non c'è alcuna condizione da valutare. Il costo dipende dal numero di righe di output: 10k × 10k = 100M di righe.
Riepilogo
CROSS JOIN = tutte le coppie.
- Lo usi intenzionalmente per creare combinazioni
- Faccia attenzione ai prodotti cartesiani accidentali (WHERE mancante)
- Lo combini con generate_series per creare report che colmano gli intervalli vuoti
Verifica rapida
Ha scritto SELECT * FROM users u, orders o; senza WHERE. Qual è l'output?
Impara SQL con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 46
- Lezioni
- 183
Domande Frequenti
La lezione «Cross join e prodotti cartesiani» è gratuita?
Sì — il testo completo di «Cross join e prodotti cartesiani» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Cross join e prodotti cartesiani»?
Usi CROSS JOIN consapevolmente per creare combinazioni e eviti esplosioni cartesiane accidentali dovute a chiavi di join mancanti Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Cross join e prodotti cartesiani»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Cross join e prodotti cartesiani
- Join laterali (LATERAL JOIN)
- Anti-join e semi-join (NOT EXISTS)
- Ottimizzazione delle prestazioni delle join tra più tabelle