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 JOININNER 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