Cláusula UNION ALL do MySQL
A cláusula `UNION ALL` no MySQL é usada para combinar os resultados de duas ou mais instruções `SELECT`. Ao contrário do `UNION`, ele inclui linhas duplicadas no conjunto de resultados finais.
Uso
A cláusula `UNION ALL` é usada quando você precisa combinar resultados de várias consultas sem remover entradas duplicadas. É particularmente útil para agregar conjuntos de dados em que as duplicatas são significativas e devem ser preservadas.
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
Nessa sintaxe, `UNION ALL` mescla os resultados de ambas as instruções `SELECT`, incluindo quaisquer linhas duplicadas.
Exemplos
1. Básico UNION ALL
SELECT name FROM students
UNION ALL
SELECT name FROM alumni;
Esse exemplo combina nomes das tabelas `students` e `alumni`, incluindo duplicatas se algum nome aparecer em ambas as tabelas.
2. UNION ALL com colunas diferentes
SELECT id, name FROM employees
UNION ALL
SELECT employee_id, full_name FROM contractors;
Aqui, o `UNION ALL` mescla as colunas `id` e `name` de `employees` com `employee_id` e `full_name` de `contractors`. Ambas as consultas devem ter o mesmo número de colunas na mesma ordem, e seus tipos de dados devem ser compatíveis para evitar erros.
3. Usando UNION ALL com condições
SELECT product_id, description FROM products WHERE category = 'Electronics'
UNION ALL
SELECT product_id, description FROM discontinued_products WHERE category = 'Electronics';
Esse exemplo combina produtos e produtos descontinuados na categoria "Eletrônicos", mantendo todas as duplicatas.
4. Usando UNION ALL com ORDER BY
SELECT id, name FROM employees
UNION ALL
SELECT employee_id, full_name FROM contractors
ORDER BY name;
Este exemplo demonstra a aplicação de `ORDER BY` ao conjunto de resultados finais para garantir que os resultados combinados sejam classificados por nome.
Dicas e práticas recomendadas
- Garanta a compatibilidade da coluna. Para evitar erros, todos os comandos `SELECT` devem ter o mesmo número de colunas com tipos de dados compatíveis.
- Preservar duplicatas significativas. Use `UNION ALL` quando as linhas duplicadas forem benéficas para suas necessidades de análise ou relatório.
- Otimizar o desempenho da consulta. Esteja ciente de que o uso do `UNION ALL` com grandes conjuntos de dados pode afetar o desempenho; considere a indexação de colunas críticas. Utilize a instrução `EXPLAIN` para analisar o plano de consulta em busca de oportunidades de otimização.
- Use a ordenação explícita. Se a ordem for importante, aplique `ORDER BY` ao conjunto de resultados final, não a consultas individuais dentro do `UNION ALL`.
- Tratamento de erros. Certifique-se de que as colunas em todas as instruções `SELECT` tenham contagens correspondentes e tipos de dados compatíveis para evitar erros de tempo de execução.