Resumo : neste tutorial, você aprenderá como usar SQLite CROSS JOIN
para combinar dois ou mais conjuntos de resultados de várias tabelas.
CROSS JOIN
Introdução à cláusula SQLite
Se você usar uma cláusula LEFT JOIN
, INNER JOIN
ou CROSS JOIN
sem a cláusula ON
or USING
, o SQLite produzirá o produto cartesiano das tabelas envolvidas. O número de linhas no produto cartesiano é o produto do número de linhas em cada tabela envolvida.
Suponha que temos duas tabelas A e B. As instruções a seguir realizam a junção cruzada e produzem um produto cartesiano das linhas das tabelas A e B.
SELECT *
FROM A JOIN B;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT *
FROM A
INNER JOIN B;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT *
FROM A
CROSS JOIN B;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
SELECT *
FROM A, B;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que a tabela A tenha N linhas e a tabela B tenha M linhas, uma CROSS JOIN
dessas duas tabelas produzirá um conjunto de resultados que contém NxM
linhas.
Imagine que se você tiver a terceira tabela C com K
linhas, o resultado da CROSS JOIN
cláusula dessas três tabelas conterá NxMxK
linhas, que podem ser muito grandes. Portanto, você deve ter muito cuidado ao usar a CROSS JOIN
cláusula.
Você usa as cláusulas INNER JOIN
e LEFT JOIN
com mais frequência do que a CROSS JOIN
cláusula. No entanto, você achará a CROSS JOIN
cláusula muito útil em alguns casos.
Por exemplo, quando você deseja ter uma matriz que tenha duas dimensões preenchidas com dados completamente como dados de membros e datas em um banco de dados de membros. Você deseja verificar os participantes dos membros para todas as datas relevantes. Nesse caso, você pode usar a CROSS JOIN
cláusula como a seguinte declaração:
SELECT name,
date
FROM members
CROSS JOIN dates;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
CROSS JOIN
Exemplo de cláusula SQLite
As instruções a seguir criam as tabelas ranks
e suits
que armazenam as classificações e naipes de um baralho de cartas e inserem os dados completos nessas duas tabelas.
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');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir usa a CROSS JOIN
cláusula para retornar dados completos de um baralho de cartas:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
classificação | terno |
---|---|
2 | Clubes |
3 | Clubes |
4 | Clubes |
5 | Clubes |
6 | Clubes |
7 | Clubes |
8 | Clubes |
9 | Clubes |
10 | Clubes |
J. | Clubes |
P | Clubes |
K | Clubes |
A | Clubes |
2 | Diamantes |
3 | Diamantes |
4 | Diamantes |
5 | Diamantes |
6 | Diamantes |
7 | Diamantes |
8 | Diamantes |
9 | Diamantes |
10 | Diamantes |
J. | Diamantes |
P | Diamantes |
K | Diamantes |
A | Diamantes |
2 | Corações |
3 | Corações |
4 | Corações |
5 | Corações |
6 | Corações |
7 | Corações |
8 | Corações |
9 | Corações |
10 | Corações |
J. | Corações |
P | Corações |
K | Corações |
A | Corações |
2 | Espadas |
3 | Espadas |
4 | Espadas |
5 | Espadas |
6 | Espadas |
7 | Espadas |
8 | Espadas |
9 | Espadas |
10 | Espadas |
J. | Espadas |
P | Espadas |
K | Espadas |
A | Espadas |
Neste tutorial, você aprendeu como usar a cláusula SQLite CROSS JOIN para produzir um produto cartesiano de múltiplas tabelas envolvidas na junção.