SQLite CROSS JOIN com um exemplo prático

Resumo : neste tutorial, você aprenderá como usar SQLite CROSS JOINpara combinar dois ou mais conjuntos de resultados de várias tabelas.

CROSS JOINIntrodução à cláusula SQLite

Se você usar uma cláusula LEFT JOIN, INNER JOINou CROSS JOINsem a cláusula ONor 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 JOINdessas duas tabelas produzirá um conjunto de resultados que contém NxMlinhas.

Imagine que se você tiver a terceira tabela C com  Klinhas, o resultado da CROSS JOINcláusula dessas três tabelas conterá NxMxKlinhas, que podem ser muito grandes. Portanto, você deve ter muito cuidado ao usar a CROSS JOINcláusula.

Você usa as cláusulas INNER JOINe LEFT JOINcom mais frequência do que a CROSS JOINcláusula. No entanto, você achará a CROSS JOINclá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 JOINclá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 JOINExemplo de cláusula SQLite

As instruções a seguir criam as  tabelas rankse suitsque 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 JOINclá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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *