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 .