SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite CROSS JOIN com um exemplo prático


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

Introdução ao SQLite CROSS JOIN cláusula


Se você usar um LEFT JOIN , INNER JOIN , ou CROSS JOIN sem o ON ou USING cláusula, o 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.

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;Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
INNER JOIN B;Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
CROSS JOIN B;Code language: SQL (Structured Query Language) (sql)
SELECT * 
FROM A, B;Code language: SQL (Structured Query Language) (sql)

Suponha que a tabela A tenha N linhas e a tabela B tenha M linhas, o 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 do CROSS JOIN cláusula dessas três tabelas conterá NxMxK linhas, que podem ser muito grandes. Portanto, você deve ter muito cuidado ao usar o CROSS JOIN cláusula.

Você usa o INNER JOIN e LEFT JOIN cláusulas com mais frequência do que o CROSS JOIN cláusula. No entanto, você encontrará o 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. Neste caso, você pode usar o CROSS JOIN cláusula como a seguinte declaração:
SELECT name,
       date 
FROM members
CROSS JOIN dates;Code language: SQL (Structured Query Language) (sql)

SQLite CROSS JOIN exemplo de cláusula


As instruções a seguir criam as ranks e suits tabelas que armazenam as graduaçõ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');Code language: SQL (Structured Query Language) (sql)

A instrução a seguir usa o CROSS JOIN cláusula para retornar um baralho completo de dados de cartas:
SELECT rank,
       suit
  FROM ranks
       CROSS JOIN
       suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql)
classificação terno
2 Clubes
3 Clubes
4 Clubes
5 Clubes
6 Clubes
7 Clubes
8 Clubes
9 Clubes
10 Clubes
J Clubes
Q 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
Q 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
Q 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
Q Espadas
K Espadas
A Espadas

Neste tutorial, você aprendeu como usar a cláusula SQLite CROSS JOIN para produzir um produto cartesiano de várias tabelas envolvidas na junção.