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.

  • 🔗 Objetivo principal: A operação UNION empilha as linhas retornadas por várias consultas SELECT em um único conjunto de resultados, uma consulta abaixo da outra.
  • 📐 Regra da coluna: Cada instrução SELECT deve retornar o mesmo número de colunas, na mesma ordem e com tipos de dados compatíveis.
  • 🧹 DISTINÇÃO DA UNIÃO: As linhas duplicadas são removidas e apenas as linhas únicas são retornadas, e esse é o comportamento esperado. MySQL Aplica-se por padrão.
  • 📚 UNIR TODOS: Todas as linhas são retornadas, incluindo as duplicadas, o que é mais rápido porque não é necessária uma etapa de desduplicação.
  • 🏷️ Nomes das colunas: O conjunto de resultados obtém os nomes das colunas da primeira instrução SELECT, portanto, os aliases pertencem a essa consulta.
  • 🛠️ Uso Típico: Consolidar duas tabelas que contêm o mesmo tipo de registro, sem permitir linhas duplicadas na saída mesclada.

MySQL UNION Operator

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.

MySQL UNIONMySQL UNION

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:

  1. 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.
  2. 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.
  3. 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.

União-Distinta

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.

União-Todos

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

Perguntas Frequentes

A operação UNION empilha as linhas de uma consulta uma abaixo da outra, fazendo com que o resultado fique mais alto. Cadastre-se A função UNION compara linhas relacionadas e coloca suas colunas lado a lado, resultando em uma tabela mais larga. Use UNION para linhas semelhantes e JOIN para tabelas relacionadas.

Coloque um único ORDENAR POR A cláusula LIMIT, colocada após o último SELECT, ordena o resultado combinado e deve usar os nomes das colunas gerados pelo primeiro SELECT. Uma cláusula LIMIT colocada ali se comporta da mesma maneira.

O erro 1222 ocorre quando as ramificações da instrução SELECT retornam contagens de colunas diferentes. Conte as colunas em cada ramificação e adicione um literal ou um marcador NULL à ramificação mais curta para que ambos os lados fiquem alinhados na mesma ordem.

Sim. Assistentes de texto para SQL, incluindo os integrados em MySQL WorkbenchGere instruções UNION a partir de uma solicitação simples. Verifique você mesmo a ordem das colunas, pois um modelo pode alinhar colunas que apenas parecem semelhantes.

Um assistente pode sugerir UNION ALL quando duplicatas forem impossíveis, o que geralmente representa um ganho de velocidade. A decisão ainda depende dos dados, portanto, confirme se os ramos realmente não podem se sobrepor antes de remover a etapa de desduplicação.

Resuma esta postagem com: