Problema:
Vuoi ottenere tutte le combinazioni di righe da due tabelle in SQL.
Esempio:
Ecco due tabelle:una contiene lettere (letters
) e l'altro contiene numeri (numbers
):
lettera |
---|
X |
S |
numero |
---|
0 |
1 |
2 |
Soluzione 1:
Per combinare ogni riga delle letters
tabella con ogni riga dei numbers
tabella, useremo il CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Il risultato della query è simile al seguente:
lettera | numero |
---|---|
X | 0 |
S | 0 |
X | 1 |
S | 1 |
X | 2 |
S | 2 |
Soluzione 2:
Un altro modo per eseguire il CROSS JOIN è il seguente:
SELECT * FROM letters, numbers;
Questo otterrà lo stesso identico risultato prodotto dalla query precedente.
Discussione:
Come regola generale, un CROSS JOIN
produce un set di risultati in cui ogni riga di una tabella viene unita a ogni riga di un'altra tabella. In altre parole, se la prima tabella memorizza n righe e la seconda tabella memorizza m righe, quindi un CROSS JOIN
risulterà in un prodotto cartesiano di n × m righe. Questo è il motivo per cui ci sono sei righe restituite dalla query nell'esempio sopra.
Perché un CROSS JOIN
produce tutte le possibili combinazioni delle righe tra le tabelle da unire, non è necessario specificare una relazione. Quindi, a differenza di altri JOINs
, non c'è ON
clausola in un CROSS JOIN
.