Problema:
Você deseja obter todas as combinações de linhas de duas tabelas no SQL.
Exemplo:
Aqui estão duas tabelas:uma contém letras (
letters
), e o outro contém números (numbers
):carta |
---|
X |
S |
número |
---|
0 |
1 |
2 |
Solução 1:
Para combinar todas as linhas das
letters
tabela com cada linha dos numbers
tabela, usaremos o CROSS JOIN
:SELECT * FROM letters CROSS JOIN numbers;
O resultado da consulta fica assim:
carta | número |
---|---|
X | 0 |
S | 0 |
X | 1 |
S | 1 |
X | 2 |
S | 2 |
Solução 2:
Outra forma de realizar o CROSS JOIN é a seguinte:
SELECT * FROM letters, numbers;
Isso obterá exatamente o mesmo resultado produzido pela consulta anterior.
Discussão:
Como regra geral, um
CROSS JOIN
produz um conjunto de resultados no qual cada linha de uma tabela é unida a cada linha de outra tabela. Em outras palavras, se a primeira tabela armazena n linhas e a segunda tabela armazena m linhas e, em seguida, um CROSS JOIN
resultará em um produto cartesiano de n × m linhas. É por isso que há seis linhas retornadas pela consulta no exemplo acima. Porque um
CROSS JOIN
produz todas as combinações possíveis das linhas entre as tabelas que estão sendo unidas, não há necessidade de especificar um relacionamento. Então, ao contrário de outros JOINs
, não há ON
cláusula em um CROSS JOIN
.