9-oracle_union和union all

Union是对结果集的并集操作,会要求2个集合是要有相同的字段和类型。

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序

Union all:对两个结果集进行并集操作,包括重复行,不进行排序

 

Union:我们对同一个表做2次查询,查询的结果并没有出现重复的2条出现:

select user_no, dept_code, sales_amt

  from t_sales

union

select user_no, dept_code, sales_amt

  from t_sales;

 

37290b2202eebb3b3c2dc4021ac433be732.jpg

哪这条语句的默认规则排序是怎样排序的呢?是按我们查询字段的顺序进行升序排序的。上面则是按user_no,dept_code,sales_amt进行排序的,为了证明我们所说的,我们换下查询字段的顺序,按sales_amt,user_no,dept_code查询:

select sales_amt, user_no, dept_code

  from t_sales

union

select sales_amt, user_no, dept_code

  from t_sales;

 

cb62d23612d848bdb16200b6947202d5f12.jpg

结果很明显是按我们所说的查询字段先后顺序后的升序排序的。

 

Union all:对2个查询的集合做并集,对重复的行不做处理:

select user_no, dept_code, sales_amt

  from t_sales

union all

select user_no, dept_code, sales_amt

  from t_sales;

 

a622bd38f82c91cc1c9d1a7cfc182476bd4.jpg

我们对表做了2次查询,所以出现了每条记录有2条。并且结果数据集也是乱序的。其实这个是我们的表面现象,在返回的结果集也是有顺序的:先返回第一个查询的结果,返回的顺序是按记录的插入顺序来的,再返回第二个查询的结果集,返回的顺序也是按记录的插入顺序来的。可以通过如下2个脚本来验证:

select user_no, dept_code, sales_amt

  from t_sales a

 where a.sales_amt <= 5000

union all

select user_no, dept_code, sales_amt

  from t_sales a

 where a.sales_amt > 3000;

e0664a0986e207a533418c6ef6763d11f53.jpg

第一个查询返回的是蓝色的记录3条。

 

select user_no, dept_code, sales_amt

  from t_sales a

 where a.sales_amt > 3000

union all

select user_no, dept_code, sales_amt

  from t_sales a

 where a.sales_amt <= 5000;

f39d53fc195d7c9366128774331e43eaad8.jpg

第一个查询返回的蓝色记录是6条,与上个脚本的第2个查询返回的记录一样,所以我们的uinion all返回也是有顺序的,先按查询脚本,再按单个脚本的记录插入顺序。

更多技术文章请关注公众号(长按后点识别图中二维码):

5797835244dd6d8a4348493f34d31c21a9c.jpg

转载于:https://my.oschina.net/u/3980335/blog/3036583

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值