SQL语句中:UNION与UNION ALL的区别

 

UNION用的比较多

union all是直接连接,取到得是所有值,记录可能有重复

union 是取唯一值,记录没有重复

1、UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]

2、UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]

效率:
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。

2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。

  说明: 按照字段的顺序进行排序------字段说的是在数据库里表里的字段的先后顺序进行排序

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL

 

union 指令表示将多个表合并显示,并不是连接显示。

union只是把结果集并集起来,而不是交集出来。

union的限制是多个表的列必须是相同的种类

union 并起来的结果集自动执行distincd,去除重复的列。

union all 则把重复列保留,完整显示多个结果集的并集

 

下面看实例 

 

执行:select date from t1 union all  select date from t2

 

date

2011-01-05 00:00:00.000

2011-01-07 00:00:00.000

2011-01-08 00:00:00.000

2011-01-08 00:00:00.000

2011-01-07 00:00:00.000

2011-01-10 00:00:00.000

2011-01-11 00:00:00.000

2011-01-12 00:00:00.000 

 

可以看出完整的现实了8个行

 

执行:select date from t1 union   select date from t2

 

date

2011-01-05 00:00:00.000

2011-01-07 00:00:00.000

2011-01-08 00:00:00.000

2011-01-10 00:00:00.000

2011-01-11 00:00:00.000

2011-01-12 00:00:00.000

 

只显示6个行,有重复日期的7,8月份都只保留了一个唯一值

 

如果执行:select date,sales from t1 union   select date,sales from t2

 

date sales

2011-01-05 00:00:00.000 1500

2011-01-07 00:00:00.000 250

2011-01-08 00:00:00.000 320

2011-01-08 00:00:00.000 800

2011-01-10 00:00:00.000 535

2011-01-11 00:00:00.000 320

2011-01-12 00:00:00.000 750

 

可以看出7月份,sales为250的数据有重复,被去除了,只保留了一个

 

如果执行:select date,sales from t1 union all  select date,sales from t2

 

date sales

 

2011-01-05 00:00:00.000 1500

2011-01-07 00:00:00.000 250

2011-01-08 00:00:00.000 320

2011-01-08 00:00:00.000 800

2011-01-07 00:00:00.000 250

2011-01-10 00:00:00.000 535

2011-01-11 00:00:00.000 320

2011-01-12 00:00:00.000 750

 

============================================================================================

 

 

 

  在集合论中,两个集合(集合A和集合B)的并集是一个包含集合A和B中所有元素的集合。换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集。如图所示。

 

 

 

  对于集合运算,需要注意以下几点:

 

  1. 参与集合运算的两个查询生成的结果集必须包含相同的列数,并且相应列必须具有兼容的数据类型。
  2. 集合运算结果中的列名由第一个查询决定,因此,如果要为结果列分配别名,应该在第一个查询中分配相应的别名。
  3. 集合运算对行进行比较时,认为两个NULL值相等。

说明:集合A代表一个表a 集合B代表一个表b  两个表的交集是重复的数据,UNION是去除重复的数据后的并集,

 

UNION集合运算分为UNION ALL和UNION DISTINCT两种情形,它们的区别是UNION ALL会保留重复行,而UNION DISTINCT会删除重复行。下面用例子来说明。

 

UNION ALL合并两个集合,并保留重复行。关于UNION ALL需要注意以下几点:

 

  1. UNION ALL实际上不会对行进行比较,也不会删除重复行,它只是做个合并的操作而已。
  2. 因为UNION ALL不会删除重复行,所以它的结果是多集,而不是真正的集合,因为相同的行在结果中可能出现多次。

 

posted @ 2016-01-11 15:35  hanxue1122  阅读(348)  评论(0编辑  收藏  举报