Resumo: neste tutorial, aprenderá como usar SQLite CROSS JOIN para combinar dois ou mais conjuntos de resultados de múltiplas tabelas.
Introdução ao SQLite CROSS JOIN clause
Se usar um LEFT JOININNER JOIN, ou CROSS JOIN sem a cláusula ON ou USING, SQLite produz o produto cartesiano das tabelas envolvidas. O número de linhas no produto cartesiano é o produto do número de linhas em cada uma das tabelas envolvidas.
p>Suponha, temos duas tabelas A e B. As seguintes afirmações fazem a junção cruzada e produzem um produto cartesiano das linhas das tabelas 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;
Suponha, a tabela A tem N linhas e a tabela B tem M linhas, o CROSS JOIN destas duas tabelas produzirá um conjunto de resultados que contém NxM linhas.
Imagine que se tiver a terceira tabela C com K linhas, o resultado da cláusula CROSS JOIN destas três tabelas conterá NxMxK linhas, que podem ser muito grandes. Portanto, deve ter muito cuidado ao utilizar a cláusula CROSS JOIN cláusula.
Utiliza-se a cláusula INNER JOIN e LEFT JOIN cláusulas mais frequentemente do que a cláusula CROSS JOIN. No entanto, encontrará a cláusula CROSS JOIN muito útil em alguns casos.
Por exemplo, quando quiser ter uma matriz que tenha duas dimensões completamente preenchidas com dados como membros e dados de datas numa base de dados de membros. Pretende verificar os assistentes dos membros para todas as datas relevantes. Neste caso, poderá utilizar a cláusula CROSS JOIN como a seguinte declaração:
Code language: SQL (Structured Query Language) (sql)SELECT name, date FROM membersCROSS JOIN dates;
SQLite CROSS JOIN clause example
As seguintes declarações criam o ranks e suits tabelas que armazenam as classificações e fatos para um baralho de cartas e inserem os dados completos nestas duas tabelas.
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');
A seguinte declaração utiliza a cláusula CROSS JOIN para devolver os dados completos do baralho de cartas:
Code language: SQL (Structured Query Language) (sql)SELECT rank, suit FROM ranks CROSS JOIN suitsORDER BY suit;
| rank | |
|---|---|
| 2 | Clubs |
| 3 | Clubs |
| 4 | Clubs |
| 5 | Clubs |
| 6 | |
| Clubs | |
| 8 | Clubs |
| 9 | Clubs |
| 10 | |
| J | Clubs |
| Q | Clubs |
| K | Clubs |
| A | Clubs |
| 2 | Diamonds |
| 3 | Diamonds |
| 4 | Diamonds |
| 5 | Diamonds |
| 6 | Diamonds |
| 7 | Diamonds |
| 8 | Diamonds |
| Diamonds | |
| 10 | Diamonds |
| J | Diamonds |
| Q | Diamonds |
| K | Diamonds |
| A | Diamonds |
| 2 | Hearts |
| 3 | Hearts |
| 4 | Hearts |
| 5 | Hearts |
| 6 | Hearts |
| Hearts | |
| 8 | Hearts |
| 9 | Hearts |
| 10 | Hearts |
| J | Hearts |
| Q | |
| K | Hearts |
| A | Hearts |
| Spades | |
| 3 | Spades |
| 4 | Spades |
| 5 | Spades |
| 6 | Spades |
| 7 | Spades |
| 8 | |
| 10 | Spades |
| J | Spades |
| Q | Spades | Spades |
| A | Spades |
neste tutorial, aprendeu como utilizar a cláusula SQLite CROSS JOIN para produzir um produto cartesiano de múltiplas tabelas envolvidas no join.