mssql sqlserver 操作结果集的方法分享(一)–union和union all


摘要:
下文将分享对查询得到的结果集进行相关操作,如下所示:
实验环境:sql server 2008 R2


1. union 和union all 合并集合

union、union all 可以将两个结果集进行合并,多次引用union关键字则可对多个结果集依次组合
union:将从结果集中剔除重复行
union all:不对结果集做任何处理,直接返回追加的结果集。
———union、union all语法如下————-
[生成集合表达式] union [ALL] [生成集合表达式]
[生成集合表达式] :为一个可以生成结果集的select 查询语句
一条sql脚本中可以存在多个union [ALL] 关键字

 -------union union all 举例应用----------
/*1 建表插入数据*/
create table A(keyId int primary key,info varchar(60), writeDate datetime)
insert into A values
(1,'a','2017-1-1'),(2,'b','2017-1-2'),(3,'c','2017-1-3')
 go
create table B(keyId2 int,info2 varchar(60), writeDate2 datetime)
insert into B values
(11,'a','2017-1-1'),(11,'a','2017-1-1'),(2,'b','2017-1-2'),(2,'b2','2017-12-2'),(13,'c','2017-1-3'),(1,'a2','2017-1-1')
 go
 
  /*union 1 表1 表2 连接  表1和表2 合并 ,然后再合并结果集中,将完全重复的行 只保留一行数据 */
  select * from A 
  union 
  select * from B 
  
  /*union all */
  select * from A 
  union  all
  select * from B 
  
/*
 如果表A中的列同表B的列数据类型不一致,
 则表B的列会隐式的转换为同表A的数据类型一致
*/
truncate table A
drop table A 

truncate table B
drop table B


2.union union ALL中order by用法注意事项

union ,union all返回结果集信息同第一个 select查询子句中的结果集列名相同
其它select中的列名将被忽略,

union union all中order by 关键字只能放入最后一个select 后面,
并且order by中所使用的列名必须为第一个select 中的列名
————多个结果集的合并执行原理——-
select *** union —语句1
select *** union —语句2
select *** —语句3
首先将“语句1”和“语句2”进行相关运算,然后将得到的结果集同 “语句3”进行运算,将得到的结果返回给客户端



联接和操作结果集的区别:
联接:
联接是根据联接条件对两张表相关进行比较,并将指定列进行笛卡尔积运算。
操作结果集:
对已经得到的表集合,进行数据操作,不会对列数量和列顺序产生变化。