Sommario: in questo tutorial, imparerete come usare SQLite CROSS JOIN
per combinare due o più set di risultati da più tabelle.
Introduzione alla clausola CROSS JOIN di SQLite
Se usate un LEFT JOIN
INNER JOIN
, o CROSS JOIN
senza la clausola ON
o USING
, SQLite produce il prodotto cartesiano delle tabelle coinvolte. Il numero di righe nel prodotto cartesiano è il prodotto del numero di righe di ogni tabella coinvolta.
Supponiamo di avere due tabelle A e B. Le seguenti istruzioni eseguono il cross join e producono un prodotto cartesiano delle righe delle tabelle A e B.
Code language: SQL (Structured Query Language) (sql)SELECT *FROM A JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM AINNER JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT *FROM ACROSS JOIN B;
Code language: SQL (Structured Query Language) (sql)SELECT * FROM A, B;
Supponiamo, la tabella A ha N righe e la tabella B ha M righe, il CROSS JOIN
di queste due tabelle produrrà un set di risultati che contiene NxM
righe.
Immaginate che se avete la terza tabella C con K
righe, il risultato della clausola CROSS JOIN
di queste tre tabelle conterrà NxMxK
righe, che potrebbero essere molto grandi. Pertanto, bisogna fare molta attenzione quando si usa la clausola CROSS JOIN
.
Si usano le clausole INNER JOIN
e LEFT JOIN
più spesso della clausola CROSS JOIN
. Tuttavia, troverete la clausola CROSS JOIN
molto utile in alcuni casi.
Per esempio, quando volete avere una matrice che ha due dimensioni riempite completamente di dati come i membri e le date in un database di membri. Volete controllare i partecipanti dei membri per tutte le date rilevanti. In questo caso, potete usare la clausola CROSS JOIN
come la seguente dichiarazione:
Code language: SQL (Structured Query Language) (sql)SELECT name, date FROM membersCROSS JOIN dates;
esempio di clausola CROSS JOIN SQLite
Le seguenti dichiarazioni creano le tabelle ranks
e suits
che memorizzano i gradi e i semi di un mazzo di carte e inseriscono i dati completi in queste due tabelle.
Code language: SQL (Structured Query Language) (sql)CREATE TABLE ranks ( rank TEXT NOT NULL);CREATE TABLE suits ( suit TEXT NOT NULL);INSERT INTO ranks(rank) VALUES('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('J'),('Q'),('K'),('A');INSERT INTO suits(suit) VALUES('Clubs'),('Diamonds'),('Hearts'),('Spades');
La seguente dichiarazione usa la clausola CROSS JOIN
per restituire i dati completi di un mazzo di carte:
Code language: SQL (Structured Query Language) (sql)SELECT rank, suit FROM ranks CROSS JOIN suitsORDER BY suit;
rank | suit |
---|---|
2 | Club |
3 | Club |
4 | Club |
5 | Club |
6 | Club |
7 | Club |
8 | Club |
9 | Club |
10 | Club |
J | Club |
Q | Club |
K | Club |
A | Club |
2 | Diamanti |
3 | Diamanti |
4 | Diamanti |
5 | Diamanti |
6 | Diamanti |
7 | Diamanti |
8 | Diamanti |
9 | Diamanti |
10 | Diamanti |
J | Diamanti |
Q | Diamanti |
K | Diamanti |
A | Diamanti |
2 | Cuori |
3 | Cuori |
4 | Cuori |
5 | Cuori |
6 | Cuori |
7 | Cuori |
8 | Cuori |
9 | Cuori |
10 | Cuori |
J | Cuori |
Q | Cuori |
K | Cuori |
A | Cuori |
2 | Spade |
3 | Spade |
4 | Spade |
5 | Spade |
6 | Spade |
7 | Spade |
8 | Spade |
9 | Spade |
10 | Spade |
J | Spade |
Q | Spade |
K | Spade |
A | Spade |
In questo tutorial, hai imparato ad usare la clausola CROSS JOIN di SQLite per produrre un prodotto cartesiano di più tabelle coinvolte nel join.
- Questo tutorial è stato utile?
- SìNo