Pular para o conteúdo principal

Treinamento para consultas com SQL Server - Parte 4 - UNION

Esta palavra chave (ou operador) é usada quando se deseja unir resultados de consultas diferentes em um mesmo conjunto de linhas (resultset ou rowset). É possível usar tanto repetindo os resultados que estão em duas ou mais consultas unidas como, fazendo com que apareçam apenas os resultados que não estão repetidos.

Com UNION se consegue reunir o resultado duas ou mais consultas havendo, porém, algumas restrições:

  1. O número das colunas retornadas deve ser o mesmo em todas as tabelas
  2. O tipo das colunas também deve ser o mesmo em todas as consultas
  3. A cláusula ORDER BY só poderá ser colocada ao final de todas as consultas, não sendo possível usar em cada consulta individualmente.

Union com repetição de resultados

Se for usada somente a cláusula UNION os resultados que forem comuns em todas as consultas serão repetidos. Considere a tabela PERSON.PERSON, na consulta abaixo são listados os nomes dos registros para quando se tem uma pessoa de contato informada e se possui dados de cartão de crédito. As tabelas desta consulta estão exibidas no diagrama da figura abaixo.

A consulta fica como está descrito abaixo.

-- Pessoas com contatos
select TOP 5 p.FirstName + ' ' + p.LastName as CompleteName
from person.person p
where exists (
 select BusinessEntityID bec
 from person.BusinessEntityContact bec
 where bec.PersonID = p.BusinessEntityID
 )

UNION 

-- Pessoas com cartão de crédito
select TOP 5 p.FirstName + ' ' + p.LastName as CompleteName
from person.person p
where exists (
 SELECT pc.BusinessEntityId
 from sales.PersonCreditCard pc
 where pc.BusinessEntityID = p.BusinessEntityID
 )

ORDER BY CompleteName
 

O resultado que é exibido na próxima figura, mostra que não foram repetidos nomes, ou seja, se algum dos nomes possuir endereço e cartão de crédito, somente será listado uma vez.

Caso seja necessário repetir os resultados para ambas as consultas (e, se houvessem mais do que duas, para cada consulta definida), basta colocar o termo ALL como na consulta que segue demonstrada.

-- UNION ALL
select TOP 5 p.FirstName + ' ' + p.LastName as CompleteName
from person.person p
where exists (
 select BusinessEntityID bec
 from person.BusinessEntityContact bec
 where bec.PersonID = p.BusinessEntityID
 )

UNION ALL

select TOP 5 p.FirstName + ' ' + p.LastName as CompleteName
from person.person p
where exists (
 SELECT pc.BusinessEntityId
 from sales.PersonCreditCard pc
 where pc.BusinessEntityID = p.BusinessEntityID
 )

ORDER BY CompleteName
 

Pode se perceber que alguns nomes são repetidos por estarem presentes nas duas consultas. Veja o resultado na próxima figura.

Para conhecer um pouco mais sobre o assunto, recomendo a leitura da documentação oficial da Microsoft que tem exemplos e outros links relacionados. Bons estudos!


Postagens mais visitadas deste blog

Como gerar scripts para exportar dados no SQL Server 2008

Uma das tarefas mais comuns no trabalho com desenvolvimento de software que consome dados em bancos como o SQL Server 2008 é a necessidade de em algum momento precisarmos exportar os dados de um banco para outro. Quer seja para realizar testes ou fazer simulações existem várias maneiras de se fazer isto. Neste post eu quero demonstrar um recurso do SQL Server Management Studio (SSMS) que permite realizar esta tarefa rapidamente.Para os que estão acostumados a usar esta ferramenta, já devem saber que é possível gerar scripts para o schema e também transferir os dados entre dois bancos distintos. Isto pode ser feito se o SSMS puder conectar-se com as duas bases, de origem e destino. No exemplo que vou dar, o objetivo é gerar o script apenas para uma tabela do banco de dados de exemplo da Microsoft – Northwind.1. Iniciando o assistenteO assistente deve ser iniciado clicando com o botão direito do mouse sobre o banco onde se encontra a tabela a qual iremos gerar o script. Deve se clicar n…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…