SQL - SQL UNION e UNION ALL - Conceitos
O objetivo do comando SQL UNION é combinar os resultados de duas consultas.
Você usa uma consulta UNION quando você quer combinar duas colunas similares a partir tabelas que não estão relacionadas - que não são unidas diretamente.
Em uma consulta UNION todas as colunas correspondentes devem possuir o mesmo tipo de dados.
Assim para utilizar o operador UNION, o número e a ordem das colunas precisam ser idênticos em todas as consultas e os tipos de dados (data types) precisam ser compatíveis.
Quando você usa uma consulta UNION apenas são selecionados os valores diferentes. (Igual a um SELECT DISTINCT).
Veja este exemplo que estamos executando no ambiente do Visual Basic 2010 Express Edition usando a janela Database Explorer;
Temos uma conexão com o banco de dados Cadastro.mdf e duas tabelas: Contratados e Funcionarios com estruturas diferentes.
1- Estrutura da tabela Contratados:
2- Estrutura da tabela Funcionarios:
A tabela Contratados possui os seguintes dados:
A tabela Funcionarios possui os seguintes dados:
Na consulta UNION :
SELECT
id, nome, salario
FROM Contratados
UNION
SELECT id, nome, salario
FROM Funcionarios
Estamos combinando o resultado de duas consultas SELECT usando o operador UNION.
Note que nos dois SELECTs estamos usando as colunas que possuem o mesmo tipo de dados:
O resultado obtido mostra a combinação dos dois comandos SELECTs onde a coluna id é ordenada em ordem ascendente.
Veja o resultado da consulta UNION usando apenas as colunas nome e salario:
Note que a ordenação ocorre pela primeira coluna de forma automática.
Podemos usar a mesma tabela para realizar uma consulta UNION e efetuar cálculos usando as funções Agregadas:
Na consulta UNION a seguir:
SELECT
nome, salario
FROM Funcionarios
UNION
SELECT 'z_SalarioTotal:', SUM(salario)
FROM Funcionarios
Estamos calculando o valor total dos salários da tabela Funcionarios.
Observe que eu tive que usar um artifício para que o nome da coluna calculada fosse exibida no final do resultado devido à ordenação automática que ocorre:
Existem também o operador UNION ALL.
O objetivo do comando SQL UNION ALL também é combinar os resultados de duas consultas.
O operador UNION ALL tem a mesma funcionalidade do UNION, porém, não executa o SELECT DISTINCT no result set final e apresenta todas as linhas, inclusive as linhas duplicadas.
Para mostrar essa funcionalidade vamos alterar o valor coluna nome da tabela Contratados cujo código é 4 de Marcos Bueno para Miriam. Ficaremos então com os seguintes dados:
Dessa forma teremos o mesmo id e o mesmo nome tanto na tabela Funcionarios como na tabela Contratados:
Veja agora o resultado usando UNION:
Os registros duplicados não são retornados.
Vejamos agora mesma consulta usando UNION ALL:
São retornados TODOS os registros mesmo os duplicados.
Mat 4:12
Ora, ouvindo Jesus que João fora entregue, retirou-se para a Galiléia;Mat 4:13
e, deixando Nazaré, foi habitar em Cafarnaum, cidade marítima, nos confins de Zabulom e Naftali;Mat 4:14
para que se cumprisse o que fora dito pelo profeta Isaías:Mat 4:15
A terra de Zabulom e a terra de Naftali, o caminho do mar, além do Jordão, a Galiléia dos gentios,Mat 4:16
o povo que estava sentado em trevas viu uma grande luz; sim, aos que estavam sentados na região da sombra da morte, a estes a luz raiou.Mat 4:17
Desde então começou Jesus a pregar, e a dizer: Arrependei- vos, porque é chegado o reino dos céus.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#