🧚 Escute! O Beekeeper Studio é uma GUI de banco de dados rápida, moderna e open source Baixar
2 de janeiro de 2024 Por Matthew Rathbone

Entender SQL muitas vezes é saber fazer as perguntas certas. Quando você lida com dados espalhados por várias tabelas, a operação full outer join se torna inegavelmente útil. Embora seja bastante comum em alguns sistemas de gerenciamento de banco de dados, o conceito de FULL OUTER JOIN é um pouco mais complicado no MySQL. Por quê? Porque ele não é suportado nativamente. Interessante, não é? Mas calma, existe uma solução alternativa!

Neste tutorial, vamos explorar em detalhes como implementar um full outer join no MySQL. Apertem os cintos, pessoal. Vamos mergulhar em uma piscina de exemplos de código.

🔖 Referência rápida: Precisa consultar rapidamente todos os tipos de JOIN? Confira nossa Cheat Sheet de SQL JOIN com diagramas visuais e exemplos de código.

O que é um Full Outer Join?

Antes de começar, vamos definir o que é um FULL OUTER JOIN. Em SQL, um full outer join combina o efeito de aplicar tanto o left outer join quanto o right outer join. Em outras palavras, ele busca os registros com valores correspondentes nas duas tabelas, além de todos os registros de ambas as tabelas cujos valores não aparecem na outra tabela.

Visualização do Full Outer Join

Veja um exemplo. Vamos supor que temos duas tabelas, Employees e Departments.

Tabela Employees:

id name
1 Alice
2 Bob
3 Charlie

Tabela Departments:

id department
2 HR
3 IT
4 Marketing

Usando a consulta FULL OUTER JOIN:

SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;

O resultado será:

Employees.id Employees.name Departments.id Departments.department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Esse resultado combina todos os registros de Employees e Departments. Ele inclui:

  • Registros com valores de id correspondentes nas duas tabelas (Bob e Charlie).
  • Registros de Employees sem registro correspondente em Departments (Alice).
  • Registros de Departments sem registro correspondente em Employees (Marketing).

Apesar de muito útil, essa sintaxe não é suportada diretamente no MySQL. Então, qual é a saída? Vamos descobrir.

Simulando um Full Outer Join no MySQL

Como mencionado acima, o MySQL não suporta explicitamente a palavra-chave FULL OUTER JOIN. No entanto, ainda podemos obter o resultado desejado usando uma combinação de LEFT JOIN e UNION

A ideia por trás da simulação de um full outer join no MySQL envolve duas etapas:

  • Fazer um LEFT JOIN a partir da primeira tabela para obter todos os registros dela, junto com os registros correspondentes da segunda tabela.
  • Usar UNION para combinar os resultados com o resultado de um RIGHT JOIN, obtendo todos os registros da segunda tabela junto com os registros correspondentes da primeira.

Veja como cada componente funciona:

Left Join:
Visualização do Left Join

Right Join:
Visualização do Right Join

Exemplo de Full Outer Join no MySQL

Aqui está um exemplo da solução alternativa usando os mesmos dados de antes

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Employees
LEFT JOIN 
    Departments ON Employees.id = Departments.id

UNION

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Departments
RIGHT JOIN 
    Employees ON Departments.id = Employees.id;

Essa consulta tem duas partes:

  1. Um LEFT JOIN para obter todos os registros da tabela Employees e os registros correspondentes da tabela Departments.
  2. Um RIGHT JOIN para obter todos os registros da tabela Departments e os registros correspondentes da tabela Employees.

O UNION combina os resultados dessas duas consultas, eliminando linhas duplicadas.

Com as mesmas tabelas de exemplo, o resultado será:

Employees_id name Departments_id department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Esse resultado, assim como o FULL OUTER JOIN em SQL, combina todos os registros de Employees e Departments.

UNION filtra duplicatas automaticamente

No caso específico do nosso exemplo com as tabelas Employees e Departments, o UNION usado na solução alternativa do MySQL para um FULL OUTER JOIN não gera duplicatas. Isso acontece porque o operador UNION elimina automaticamente as linhas duplicadas do seu resultado.

Para esclarecer, vamos ver como o UNION funciona nesse contexto:

  • A primeira parte da consulta (o LEFT JOIN) busca todos os registros da tabela Employees e os registros correspondentes da tabela Departments. Isso inclui linhas com valores de id correspondentes nas duas tabelas e linhas de Employees sem correspondência em Departments.

  • A segunda parte da consulta (o RIGHT JOIN) busca todos os registros da tabela Departments e os registros correspondentes da tabela Employees. Isso inclui linhas com valores de id correspondentes nas duas tabelas e linhas de Departments sem correspondência em Employees.

Como o UNION remove duplicatas, as linhas com valores de id correspondentes (aquelas que apareceriam tanto no resultado do LEFT JOIN quanto no do RIGHT JOIN) aparecerão apenas uma vez no resultado final.

Em resumo, usar UNION nesse contexto garante que cada combinação única de dados de Employees e Departments apareça apenas uma vez no resultado, imitando assim o comportamento de um FULL OUTER JOIN sem duplicatas.

Pratique no Beekeeper Studio

Espero que este tutorial de full outer join no MySQL tenha sido útil para você. Em próximos posts, continuaremos explorando outros recursos avançados do MySQL, compartilhando mais exemplos de código e nos aprofundando em por que e como esses recursos funcionam. Até lá, continue praticando suas habilidades em SQL, de preferência usando o Beekeeper Studio.

Beekeeper Studio é um cliente de banco de dados gratuito e open source

A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit

O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.

A versão do Beekeeper para Linux tem 100% dos recursos, sem atalhos e sem concessões.

O que os usuários dizem sobre o Beekeeper Studio

★★★★★
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com SQL. É rápido, intuitivo e torna o trabalho com banco de dados agradável de novo."
— Alex K., Desenvolvedor de Banco de Dados
★★★★★
"Já testei várias GUIs de banco de dados, mas o Beekeeper encontra o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."
— Sarah M., Engenheira Full Stack

Pronto para melhorar seu fluxo de trabalho com SQL?

download Baixar grátis