MySQL UNIÃO – Tutorial Completo
⚡ Resumo Inteligente
MySQL A operação UNION combina os resultados de duas ou mais consultas SELECT em um único conjunto de resultados consolidado. Esta explicação aborda as regras de coluna que tornam uma união válida, a diferença entre UNION DISTINCT e UNION ALL, e exemplos práticos executados no banco de dados myflixdb.

O que é um SINDICATO em MySQL?
UNION é um MySQL Operador que combina os resultados de múltiplas consultas SELECT em um conjunto de resultados consolidado. As linhas retornadas pela segunda consulta são colocadas abaixo das linhas retornadas pela primeira, o que produz uma única lista vertical em vez de duas listas separadas.
O único requisito para que isso funcione é que o número de colunas seja o mesmo em todas as consultas SELECT que precisam ser combinadas.
Suponha que temos duas tabelas como as seguintes.
Ambas as tabelas contêm duas colunas do mesmo tipo, portanto, são elegíveis para uma união. Os exemplos a seguir combinam exatamente essas duas tabelas.
Por que usar UNION?
Suponha que haja uma falha no design do seu banco de dados e você esteja usando duas tabelas diferentes destinadas ao mesmo propósito. Você deseja consolidar essas duas tabelas em uma só, eliminando quaisquer registros duplicados da criação.ping na nova tabela. Você pode usar UNION nesses casos.
O operador também é útil no trabalho diário de geração de relatórios:
- ArchiDados em tempo real e atualizados: É possível gerar relatórios com uma tabela atual e uma tabela de arquivo que compartilham as mesmas colunas, sem a necessidade de mesclá-las fisicamente.
- Diversas fontes, um único relatório: Membros e filmes, ou vendas de duas regiões, podem ser listados em uma única saída para uma auditoria rápida.
- Verificações de migração: As linhas da tabela antiga e da tabela nova podem ser empilhadas e comparadas antes que a tabela antiga seja descartada.
A operação UNION não substitui a operação JOIN. A operação UNION adiciona linhas abaixo de linhas, enquanto a operação JOIN adiciona colunas ao lado de colunas, e essa distinção determina qual operador a tarefa exige.
MySQL Sintaxe e regras da união
Agora que o objetivo está claro, observe o formato da declaração e as regras que o banco de dados impõe.
SELECT column1, column2 FROM `table1` UNION [DISTINCT | ALL] SELECT column1, column2 FROM `table2`;
Três regras regem todos os sindicatos:
- Número igual de colunas. Cada Instrução SELECT deve retornar o mesmo número de colunas, caso contrário MySQL Gera o erro 1222.
- Tipos de dados compatíveis na mesma ordem. A primeira coluna da primeira consulta corresponde à primeira coluna da segunda, portanto, um número deve corresponder a um número e um texto deve corresponder a outro texto.
- Os nomes vêm da primeira consulta. O cabeçalho do conjunto de resultados é obtido da primeira instrução SELECT, razão pela qual qualquer alias deve estar presente ali.
An ORDER BY LIMIT A cláusula colocada no final aplica-se ao resultado combinado, e não a um dos seus ramos, e deve fazer referência aos nomes das colunas produzidos pelo primeiro SELECT.
UNIÃO DISTINTA vs UNIÃO TOTAL
Com as regras definidas, a decisão que resta é se as linhas duplicadas devem permanecer.
Combinando tabelas usando DISTINCT
Vamos agora criar uma consulta UNION para combinar as duas tabelas usando DISTINCT.
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1, column2 FROM `table2`;
Aqui, as linhas duplicadas são removidas e apenas as linhas exclusivas são retornadas.
Observação: MySQL usa a cláusula DISTINCT como padrão ao executar consultas UNION se nada for especificado.
Combinando tabelas usando ALL
Vamos agora criar uma consulta UNION para combinar as duas tabelas usando o comando ALL.
SELECT `column1`, `column2` FROM `table1` UNION ALL SELECT `column1`, `column2` FROM `table2`;
Aqui, as linhas duplicadas estão incluídas, já que usamos a opção ALL.
As duas imagens tornam a diferença fácil de ver, e a tabela abaixo a resume.
| Ponto de comparação | UNIÃO DISTINTA | UNIÃO TUDO |
|---|---|---|
| Linhas duplicadas | Removido do resultado | Mantido no resultado |
| Comportamento padrão | Sim, aplica-se quando nada é especificado. | Não, a palavra-chave ALL deve ser escrita. |
| Agilidade (Speed) | Mais lento, requer uma passagem de desduplicação. | Mais rápido, as linhas são retornadas à medida que são lidas. |
| Melhor usado quando | A lista mesclada deve conter linhas únicas. | Cada linha importa, ou não podem ocorrer duplicatas. |
💡 Dica: Se as duas ramificações não puderem produzir linhas duplicadas, escolha UNION ALL. O banco de dados então ignora o trabalho de classificação e comparação que o DISTINCT exige, o que representa uma economia considerável em tabelas grandes.
Exemplo prático usando MySQL Workbench
Os exemplos apresentados até agora utilizaram tabelas de exemplo. A mesma consulta agora é executada no banco de dados real do myflixdb, onde as duas tabelas contêm registros bastante diferentes.
Em nosso banco de dados myFlixDB, vamos combinar o membership_number e full_names colunas da tabela de membros com o movie_id e title colunas da tabela de filmes. Ambas as consultas retornam duas colunas, portanto a união é válida.
Podemos usar a seguinte consulta.
SELECT `membership_number`, `full_names` FROM `members` UNION SELECT `movie_id`, `title` FROM `movies`;
Executando o script acima em MySQL bancada A consulta ao banco de dados myflixdb nos fornece os resultados mostrados abaixo. Observe que os cabeçalhos vêm da primeira instrução SELECT, embora as linhas inferiores sejam registros de filmes.
| membership_number | full_names |
|---|---|
| 1 | Janet Jones |
| 2 | Janet Smith Jones |
| 3 | Robert Phil |
| 4 | Gloria Williams |
| 5 | Leonard Hofstadter |
| 6 | Sheldon Cooper |
| 7 | Rajesh Koothrappali |
| 8 | Leslie Winkle |
| 9 | Howard Wolowitz |
| 16 | 67% Guilty |
| 6 | Angels and Demons |
| 4 | Code Name Black |
| 5 | Daddy's Little Girls |
| 7 | Davinci Code |
| 2 | Forgetting Sarah Marshal |
| 9 | Honey mooners |
| 19 | movie 3 |
| 1 | Pirates of the Caribean 4 |
| 18 | sample movie |
| 17 | The Great Dictator |
| 3 | X-Men |




