ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Server中几个高级查询运算词(UNION, EXCEPT 和 INTERSECT)

SQL Server中几个高级查询运算词(UNION, EXCEPT 和 INTERSECT)

原创 Linux操作系统 作者:iSQlServer 时间:2009-08-10 15:02:01 0 删除 编辑

这里主要演示3个运算词,UNION, EXCEPT 和 INTERSECT

这三个放在一起是有理由的,因为他们都是操作两个或多个结果集,并且这些结果集有如下限制:
  • 所有查询中的列数和列的顺序必须相同.
  • 数据类型必须兼容.

并且它们都是处理于多个结果集中有重复数据的问题

首先还是创建测试环境

use tempdb

create table tempTable1 (id int primary key identity, price int)
create table tempTable2 (id int primary key identity, price int)
insert into tempTable1 select 3 union all select 1 union all select 2 union all select 3 
insert into tempTable2 select 3 union all select 4 union all select 1 union all select 2

select * from temptable1
select * from temptable2

 

两个表的初始结果如下

 

非常简单的两个表,列数和列顺序一样. 而数据中有一条数据相同,这里的相同时完全相同,包括主键,我这里的主键是标识列, 所以插入的顺序也一样, 若不是标识列,则随意,只要保证有数据完全一致,就可以说他们是重复的数据, 这样用上面3个运算词才会有效.

先来看看UNION和UNION ALL

select * from temptable1
union
select * from temptable2

select * from temptable1
union all
select * from temptable2

 

有 ALL 关键字是完全整合两个结果集,而无 ALL 是在之前的基础上去重了,所以第一个查询中{id:1, price:3}只会显示一条,结果如下:

 

 在来看看EXCEPT, 也是去重的, 但是它在去掉两个或多个集合中重复数据的之后, 只会保留第一个结果集中的数据

select * from temptable1
except
select * from temptable2

 

 

 

其实也是查询表A, 看表A的数据在表B中是否存在, 如果存在, 则删掉

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-611763/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2073990