Pular para o conteúdo principal
Documentos
Sintaxe básicaFunções JSONAcionadoresGerenciamento de tabelas e esquemasFunções de cadeia de caracteresFunções matemáticasFunções de dataBancos de dadosÍndices

PostgreSQL CROSS JOIN

O `CROSS JOIN` no PostgreSQL produz um produto cartesiano de duas tabelas, o que significa que ele retorna todas as combinações possíveis de linhas das tabelas unidas. Essa sintaxe básica é particularmente útil quando você precisa combinar cada linha de uma tabela com cada linha de outra.

Um produto cartesiano é o resultado da combinação de cada linha de uma tabela com cada linha de outra tabela, levando a um conjunto de dados em que o número de linhas é o produto das contagens de linhas das tabelas individuais.

Uso

O `CROSS JOIN` é usado quando você deseja emparelhar cada linha de uma tabela com cada linha de outra tabela, independentemente de quaisquer valores correspondentes. Isso pode ajudar em cenários em que você precisa de todas as combinações possíveis de dados de dois conjuntos de dados.

SELECT *
FROM table1
CROSS JOIN table2;

Nessa sintaxe, o `CROSS JOIN` combina cada linha da `table1` com cada linha da `table2`. A ordem das tabelas na instrução `CROSS JOIN` pode afetar a sequência dos dados resultantes, embora não o conteúdo em si.

Exemplos

1. CROSS JOIN básico

SELECT *
FROM products
CROSS JOIN categories;

Esse exemplo gera um produto cartesiano entre `produtos` e `categorias`, gerando todas as combinações possíveis de produto e categoria. Se `produtos` tiver 10 linhas e `categorias` tiver 5 linhas, o conjunto de resultados conterá 50 linhas.

2. CROSS JOIN com colunas selecionadas

SELECT products.product_name, categories.category_name
FROM products
CROSS JOIN categories;

Aqui, o `CROSS JOIN` é usado para combinar colunas específicas de `products` e `categories`, fornecendo um conjunto de resultados mais focado. O tamanho do conjunto de resultados permanece o mesmo, mas somente as colunas selecionadas são exibidas.

3. CROSS JOIN com filtros adicionais

SELECT a.name, b.course
FROM students a
CROSS JOIN courses b
WHERE b.is_active = true;

Este exemplo aplica um filtro após a execução de um `CROSS JOIN`, resultando em um produto cartesiano de apenas cursos ativos com todos os alunos. O tamanho do conjunto de resultados depende do número de cursos ativos.

4. CROSS JOIN com conjuntos de dados pequenos

SELECT x.item, y.value
FROM small_table1 x
CROSS JOIN small_table2 y;

Quando você trabalha com conjuntos de dados pequenos, o `CROSS JOIN` pode ser prático sem problemas de desempenho. Por exemplo, a combinação de 3 linhas da `small_table1` com 4 linhas da `small_table2` resulta em apenas 12 linhas.

Dicas e práticas recomendadas

  • Entenda o tamanho dos conjuntos de resultados. Como o `CROSS JOIN` multiplica o número de linhas, tenha cuidado com o potencial de grandes conjuntos de dados, o que pode levar a problemas de desempenho.
  • Use seletivamente. Aplique o `CROSS JOIN` somente quando um produto cartesiano for realmente necessário, como a geração de combinações para fins de teste ou relatório.
  • Combine com filtros. Use as cláusulas `WHERE` para limitar os resultados às combinações relevantes depois de executar um `CROSS JOIN`.
  • Considere alternativas. Se você precisar de critérios de correspondência específicos, um `INNER JOIN` ou `LEFT JOIN` pode ser mais apropriado. Por exemplo, use um `INNER JOIN` quando você precisar combinar linhas com base em condições específicas, ou um `LEFT JOIN` para incluir todas as linhas de uma tabela com as linhas correspondentes de outra.