Oracle/mysql联合查询union、union all

若无特殊说明,oracle与mysql均适用

  • 使用场景

union、union all关键字用户将两个select查询结果集合并成一个结果集,例如:一个旧系统使用a表,同样的信息但是新系统使用了b表,这时候可以使用union或者union all关键字将旧系统和新系统的数据合并显示。

  • union和union all的相同点和不同点

  1. 相同点:都是对两个查询结果集进行并集操作。
  2. 不同点:union会合并重复的行,而union all则不会,所谓重复行即两行数据所有的查询字段都相同。
  3. union all先跟左边的查询结果,然后再跟右边的查询结果。在oracle中union是全量排序,所谓全量排序即先按照第一个字段排序,然后按照第二个字段排序,依次类推。而在mysql中union先跟左边的查询结果,然后再跟右边的查询结果
  • 使用需要注意点

  1. 如果不想使用默认的全量排序,可以在sql语句末尾使用order by+数字(排序字段的位置),mysql还可以使用order by+字段的方式
  2. 关键字两边查询的字段要完全一样
  • 扩展补充(mysql不支持)

  1. Intersect:取两个结果集的交集,和并重复行。
  2. Minus:取两个结果集的差集,即在第一个查询结果中包含,并且在第二个查询结果中不包含的数据,合并重复行。
  • DEMO

create table student_a(
id number,
name varchar2(100));

create table student_b(
id number,
name varchar2(100));

insert into STUDENT_A (id, name)
values (1, '张三');
insert into STUDENT_A (id, name)
values (2, '李四');
insert into STUDENT_A (id, name)
values (1, '张三');
commit;

insert into STUDENT_B (id, name)
values (2, '李四');
insert into STUDENT_B (id, name)
values (3, '赵六');
commit;

select id,name from student_a
union
select id,name from student_b ;

select id,name from student_a
union all
select id,name from student_b ;

select id,name from student_a
Intersect
select id,name from student_b ;

select id,name from student_a
Minus
select id,name from student_b ;

select id,name from student_a
union all
select id,name from student_b order by 1;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值