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 FULL JOIN

O `FULL JOIN` no PostgreSQL combina os resultados do `LEFT JOIN` e do `RIGHT JOIN`. Ele retorna todos os registros quando há uma correspondência nos registros da tabela esquerda ou direita e preenche os `NULLs` quando não há correspondência.

Uso

O `FULL JOIN` é usado quando você deseja recuperar todos os registros de duas tabelas e incluir linhas sem correspondências diretas em nenhuma das tabelas. Isso é particularmente útil para conjuntos de dados com registros que podem não ter correspondências na outra tabela.

sql
SELECT columns
FROM table1
FULL JOIN table2 ON table1.common_column = table2.common_column;

Nessa sintaxe, `FULL JOIN` mescla as linhas de `table1` e `table2` com base em uma coluna compartilhada, incluindo as linhas não correspondentes de ambas as tabelas.

Exemplos

1. FULL JOIN básico

sql
SELECT *
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Este exemplo recupera todos os registros das tabelas `employees` e `departments`, combinando-os com `dept_id` e `id`, e preenche com `NULLs` as linhas não correspondentes.

2. Usando FULL JOIN com WHERE

sql
SELECT employees.name, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
WHERE departments.name IS NOT NULL;

Essa consulta combina `FULL JOIN` com uma cláusula `WHERE` para filtrar os resultados em que o nome do departamento é `NULL`, mostrando como refinar os resultados após a união.

3. FULL JOIN com agregação

sql
SELECT employees.dept_id, COUNT(employees.id) AS employee_count, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
GROUP BY employees.dept_id, departments.name;

Este exemplo usa `FULL JOIN` com `GROUP BY` para agregar dados, fornecendo uma contagem de funcionários por departamento, incluindo departamentos sem funcionários.

4. Manipulação de valores NULL

sql
SELECT COALESCE(employees.name, 'No Employee') AS employee_name, 
       COALESCE(departments.name, 'No Department') AS department_name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Este exemplo demonstra como lidar com valores `NULL` usando `COALESCE` para fornecer valores padrão para linhas não correspondentes.

Comparação de tipos de JOIN

  • LEFT JOIN: Retorna todos os registros da tabela da esquerda e os registros correspondentes da tabela da direita. Os registros não correspondentes da tabela correta são preenchidos com `NULL`.
  • JUNÇÃO DIREITA: Retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda. Os registros não correspondentes da tabela da esquerda são preenchidos com `NULL`.
  • JOIN COMPLETO: Retorna todos os registros de ambas as tabelas, preenchendo `NULL` para linhas não correspondentes de qualquer tabela.

Dicas e práticas recomendadas

  • Use com cautela em conjuntos de dados grandes. O `FULL JOIN` pode produzir grandes conjuntos de resultados, portanto, certifique-se de que ele seja necessário para sua análise.
  • Manipular valores `NULL`. Esteja preparado para gerenciar valores `NULL` em sua lógica, especialmente ao realizar cálculos ou filtrar resultados.
  • Otimize com índices. Garanta a indexação adequada nas colunas de união para melhorar o desempenho.
  • Combine com outros filtros. Use as cláusulas `WHERE` para filtrar ainda mais os resultados e reduzir o tamanho do conjunto de resultados.
  • Teste em subconjuntos. Valide a lógica em amostras de dados menores antes de aplicar o `FULL JOIN` a tabelas inteiras.
  • Considerações sobre o desempenho. Esteja ciente de que o `FULL JOIN` em tabelas muito grandes pode levar a um tempo de processamento e uso de recursos significativos.
  • Considere alternativas. Em alguns casos, o uso de `LEFT JOIN` ou `RIGHT JOIN` pode ser mais apropriado, dependendo dos requisitos específicos de sua consulta.