Explicação e Exemplos Práticos de Combinação de Consultas Usando UNION no SQL

O operador UNION no SQL é uma ferramenta poderosa usada para combinar os resultados de várias consultas SELECT em um único conjunto de resultados. Ao combinar dados obtidos de diferentes tabelas ou de condições diferentes na mesma tabela, facilita-se a análise de dados complexos e a criação de relatórios. Neste artigo, vamos explorar como usar o UNION, as diferenças entre UNION e UNION ALL, exemplos práticos, e as melhores práticas ao utilizá-lo.

Índice

Uso Básico do UNION

O operador UNION é usado para combinar os conjuntos de resultados de duas ou mais consultas SELECT. A estrutura básica é a seguinte:

SELECT coluna1, coluna2, ...
FROM tabela1
UNION
SELECT coluna1, coluna2, ...
FROM tabela2;

Pontos a Considerar ao Usar UNION

Ao utilizar o UNION, considere os seguintes pontos:

  • O número de colunas e os tipos de dados em cada consulta SELECT devem coincidir.
  • Os nomes das colunas não precisam coincidir, mas os tipos de dados devem ser compatíveis.
  • Por padrão, o UNION remove linhas duplicadas. Para manter duplicatas, use UNION ALL.

Diferença Entre UNION e UNION ALL

No SQL, há dois operadores principais: UNION e UNION ALL. Ambos combinam os resultados de várias consultas SELECT, mas têm diferenças importantes.

UNION

O operador UNION remove linhas duplicadas, retornando um conjunto de resultados único. Ou seja, se o conjunto de resultados combinado contiver linhas duplicadas, elas serão contadas como uma única linha.

SELECT coluna1, coluna2, ...
FROM tabela1
UNION
SELECT coluna1, coluna2, ...
FROM tabela2;

UNION ALL

O operador UNION ALL retorna todas as linhas, incluindo as duplicadas. Como todas as linhas são incluídas no conjunto de resultados, o desempenho pode ser melhor do que o UNION em alguns casos.

SELECT coluna1, coluna2, ...
FROM tabela1
UNION ALL
SELECT coluna1, coluna2, ...
FROM tabela2;

Comparação de Exemplos

Vamos ver a diferença entre UNION e UNION ALL usando os seguintes exemplos de tabelas.

Tabela 1:

idnome
1Taro
2Hanako

Tabela 2:

idnome
2Hanako
3Jiro
SELECT id, nome
FROM tabela1
UNION
SELECT id, nome
FROM tabela2;

Resultado desta consulta:

idnome
1Taro
2Hanako
3Jiro
SELECT id, nome
FROM tabela1
UNION ALL
SELECT id, nome
FROM tabela2;

Resultado desta consulta:

idnome
1Taro
2Hanako
2Hanako
3Jiro

O uso do UNION é eficaz quando se deseja evitar duplicações de dados. O UNION ALL é adequado para situações em que se deseja manter os dados duplicados ou quando o desempenho é uma prioridade.

Exemplo Prático 1: Combinação de Dados de Tabelas Diferentes

Vamos ver um exemplo de uso do operador UNION para combinar dados de diferentes tabelas. Aqui, combinaremos nomes e informações de contato das tabelas de funcionários e clientes para criar uma lista completa de todas as pessoas.

Tabela de Funcionários (employees)

employee_idnomeemail
1Taro Yamadayamada@example.com
2Hanako Satosato@example.com

Tabela de Clientes (customers)

customer_idnomeemail
1Jiro Suzukisuzuki@example.com
2Ichiro Tanakatanaka@example.com

A consulta para combinar todos os nomes e endereços de e-mail dessas tabelas em uma única lista é a seguinte:

SELECT nome, email
FROM employees
UNION
SELECT nome, email
FROM customers;

Resultado da Consulta

O resultado desta consulta é o seguinte:

nomeemail
Taro Yamadayamada@example.com
Hanako Satosato@example.com
Jiro Suzukisuzuki@example.com
Ichiro Tanakatanaka@example.com

Como você pode ver, os nomes e e-mails de funcionários e clientes foram integrados em uma única lista. O uso do UNION permite combinar facilmente dados de tabelas diferentes.

Exemplo Prático 2: Combinação de Dados Condicionais na Mesma Tabela

Agora, vamos ver um exemplo de uso do UNION para combinar dados baseados em condições diferentes dentro da mesma tabela. Aqui, vamos combinar as vendas de um mês específico com as vendas de todo o período na tabela de dados de vendas.

Tabela de Dados de Vendas (sales)

sale_idprodutosale_datevalor
1Produto A2024-01-155000
2Produto B2024-02-203000
3Produto C2024-01-107000
4Produto D2024-03-052000

A consulta para combinar as vendas de janeiro de 2024 com as vendas de todo o período em um único conjunto de resultados é a seguinte:

SELECT produto, valor, 'Janeiro 2024' AS periodo
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
UNION
SELECT produto, valor, 'Todo o período' AS periodo
FROM sales;

Resultado da Consulta

O resultado desta consulta é o seguinte:

produtovalorperiodo
Produto A5000Janeiro 2024
Produto C7000Janeiro 2024
Produto A5000Todo o período
Produto B3000Todo o período
Produto C7000Todo o período
Produto D2000Todo o período

Como você pode ver, ao combinar dados baseados em diferentes condições na mesma tabela, é possível exibir as vendas de um período específico junto com as vendas de todo o período. Usando o UNION, é fácil realizar a combinação de dados complexos baseada em condições específicas.

Melhores Práticas ao Usar UNION

Vamos discutir as melhores práticas para usar o operador UNION de maneira eficaz. Seguindo essas diretrizes, você pode melhorar o desempenho de suas consultas e mantê-las legíveis.

Considerar o Desempenho

Como o UNION remove linhas duplicadas por padrão, é necessário processamento adicional, o que pode impactar o desempenho. Se não houver problema em manter as linhas duplicadas, use UNION ALL para melhorar o desempenho.

SELECT coluna1, coluna2, ...
FROM tabela1
UNION ALL
SELECT coluna1, coluna2, ...
FROM tabela2;

Verificar a Compatibilidade dos Tipos de Dados

Ao usar UNION, é necessário garantir que o número de colunas e os tipos de dados em cada consulta SELECT sejam compatíveis. Se você tentar combinar tipos de dados diferentes, ocorrerá um erro. Certifique-se de que os tipos de dados em cada coluna sejam compatíveis antes de executar a consulta.

Selecionar Apenas as Colunas Necessárias

Para melhorar o desempenho e a legibilidade da consulta, selecione apenas as colunas necessárias. Incluir colunas desnecessárias pode tornar o conjunto de resultados mais complexo e aumentar o tempo de processamento.

SELECT coluna1, coluna2
FROM tabela1
UNION
SELECT coluna1, coluna2
FROM tabela2;

Usar Índices Adequados

Para otimizar o desempenho das consultas UNION, é importante configurar os índices adequados. O uso de índices permite que o banco de dados processe as consultas combinadas de forma mais eficiente.

Considerar a Ordem das Consultas

Na consulta UNION, você pode melhorar o desempenho geral ao colocar a consulta que faz a filtragem mais eficiente primeiro. Ao filtrar o máximo de dados possível na primeira consulta, você reduz a carga das consultas subsequentes.

Praticando essas melhores práticas, você pode melhorar o desempenho e a legibilidade das consultas usando o operador UNION.

Conclusão

O operador UNION é uma ferramenta poderosa para combinar os resultados de várias consultas SELECT em um único conjunto de resultados. Ao entender as diferenças entre UNION e UNION ALL e utilizá-los de forma adequada, você pode integrar dados de maneira eficiente.

Neste artigo, explicamos desde o uso básico até exemplos práticos. Também introduzimos as melhores práticas para considerar o desempenho e a legibilidade. Ao aplicar esses conhecimentos, você poderá melhorar a eficiência de suas consultas de banco de dados e realizar análises de dados complexas de maneira mais simples.

Utilize o UNION de forma eficaz para resolver desafios de integração de dados e realizar operações de banco de dados mais poderosas.

Índice