Combinar dados usando (SET OPERATORS) UNION, INTERSECT e EXCEPT no SQL Server
- 13-09-2022
- Toanngo92
- 0 Comments
set operadores fornecidos pelo SQL Server:
- UNIÃO
- INTERSEC
- EXCETO
Mục lục
Operador de união (fusão)
Os resultados de duas instruções de consulta diferentes podem ser combinados em um único conjunto de resultados usando o operador UNION. As instruções de consulta devem ter um tipo de coluna compatível e um número igual de colunas. Os nomes das colunas podem ser diferentes em cada instrução, mas os tipos de dados devem ser compatíveis. Por tipos de dados compatíveis, significa que o conteúdo de uma das colunas pode ser convertido em outra coluna. Por exemplo, se uma instrução de consulta tiver o tipo de dados int e outra tiver o tipo de dados money , elas são compatíveis entre si e a união pode ocorrer entre elas porque os dados int podem ser convertidos em money .
Sintaxe:
Query_Statement1 UNION [ALL] Query Statment_2
Por exemplo:
SELECT Product.ProductId FROM Production.Product UNION SELECT ProductId FROM Sales.SalesOrderDetail
A instrução acima recuperará todos os dados da coluna ProductId de ambas as tabelas correspondentes. Se você usar a cláusula ALL , todas as tabelas aparecerão no conjunto de resultados, incluindo registros duplicados (No detalhe, há muitos Pedidos vendendo o mesmo Produto).
UNION ALL exemplo:
SELECT Product.ProductId FROM Production.Product UNION ALL SELECT ProductId FROM Sales.SalesOrderDetail
Por padrão, o operador UNION exclui registros redundantes no conjunto de resultados. No entanto, se você adicionar a cláusula ALL ao operador UNION, todos os registros serão retornados.
Diferença entre UNION e JOIN:
As operações JOIN e UNION podem ser usadas para combinar dados de uma ou mais tabelas. A diferença está na forma como os dados são combinados.
Em uma palavra, join combina dados em novas colunas. Se duas tabelas forem unidas, os dados da primeira tabela serão exibidos em um conjunto de colunas junto com a coluna da segunda tabela na mesma linha.
As uniões combinam dados em novas linhas. Se duas tabelas forem “mescladas” juntas, os dados da primeira tabela estarão em um conjunto de linhas e os dados da segunda tabela em outro conjunto. As linhas têm o mesmo resultado.
Operador INTERSECT (intersecção)
Digamos que a situação tenha 2 tabelas Product e SalesOrderDetail e queira exibir todas as linhas comuns em ambas as tabelas. Para fazer isso, você pode usar o operador INTERSECT . O operador INTERSECT é usado com duas instruções de consulta que retornam um conjunto de resultados separado com linhas comuns a ambas as consultas.
Sintaxe:
Query_statement1 INTERSECT Query_statement2
Por exemplo:
SELECT Product.ProductId FROM Production.Product INTERSECT SELECT ProductId FROM Sales.SalesOrderDetail
O resultado da interseção entre as tabelas Production.Product e Sales.SalesOrderDetail terá apenas productids que correspondam aos registros na tabela de produtos. Em uma grande empresa, haverá um grande número de registros de dados armazenados no banco de dados. Em vez de armazenar todos os dados em uma única tabela, ela pode ser dividida em várias tabelas diferentes. Quando os dados são armazenados em tabelas separadas, o SQL Server tem muitas maneiras de combinar dados de tabelas como JOIN,UNION,INTERSECT .
Regras para usar o INTERSECT :
- O número de colunas e a ordem em que são fornecidas devem ser os mesmos em ambas as consultas
- Os tipos de dados das colunas usadas devem ser compatíveis
EXCEPT operador (exceto)
O operador EXCEPT retorna todas as linhas distintas da consulta à esquerda desse operador e remove todos os registros do conjunto de resultados se eles corresponderem à condição à direita do operador EXCEPT .
Sintaxe:
Query_statement1 EXCEPT Query_statement2
As duas regras que se aplicam ao operador INTERSECT também se aplicam ao operador EXCEPT:
- O número de colunas e a ordem em que são fornecidas devem ser os mesmos em ambas as consultas
- Os tipos de dados das colunas usadas devem ser compatíveis
Por exemplo:
SELECT Product.ProductId FROM Production.Product EXCEPT SELECT ProductId FROM Sales.SalesOrderDetail
Com o exemplo acima, somente os registros da tabela Production.Product que não aparecem na tabela Sales.SalesOrderDetail são retornados, podemos ver que esta cláusula pode ser utilizada na busca e análise de produtos ainda não vendidos.
Vemos que o operador EXCEPT recupera todos os registros da primeira tabela excluindo as correspondências da tabela 2, portanto, ao usar EXCEPT, a ordem das 2 tabelas na consulta é importante, e com INTERSECT não importa qual tabela está predefinida.