Oracle差集查询的四种方法

【前言】
本期汇总了Oracle数据库两张表间使用SQL进行差集查询的四种方法,主要应用于表复制后进行数据比对的情况,四种方法有各自较合适的使用场景。
【准备工作】
新建两张表stu1和stu2,表结构和数据如下图。
stu1表结构如下:
在这里插入图片描述
stu2表结构如下:
在这里插入图片描述
stu1数据如下:
在这里插入图片描述
stu2数据如下:
在这里插入图片描述

1.1.NOT EXISTS
意思是不在此范围内的,用来比对两张表的某一个列是否存在差集,两张表列数可不一致,按列来查询(支持不一致的列数据类型)。
1.1.1. 找出stu1存在,但stu2不存在的NAME(数据类型一致)
SELECT * FROM stu1 a WHERE NOT EXISTS (SELECT * FROM stu2 b WHERE a.NAME = b.NAME);
在这里插入图片描述

1.1.2. 找出stu1存在,但stu2不存在的AGE(数据类型不一致)
SELECT * FROM stu1 a WHERE NOT EXISTS (SELECT * FROM stu2 b WHERE a.AGE = b.AGE);
在这里插入图片描述

1.2.NOT IN
类似于NOT EXISTS,但如果查询的列存在空值的话,将导致查询结果为空。
1.2.1. 找出stu1存在,但stu2不存在的NAME(stu2存在空值)
stu1 在这里插入图片描述
stu2 在这里插入图片描述
SELECT * FROM stu1 a WHERE a.NAME NOT IN (SELECT b.NAME FROM stu2 b);
在这里插入图片描述

1.2.2. 找出stu1存在,但stu2不存在的NAME(stu2存在空值,但给出条件)
SELECT * FROM stu1 a WHERE a.NAME NOT IN (SELECT b.NAME FROM stu2 b WHERE a.NAME = b.NAME);
在这里插入图片描述

1.3.UNION ALL
union all本身的用法是合并两个或以上select语句的结果集,相同数据不合并,这里的思路是对union all结果集搜索出相同数据数量只为1的结果(即为stu1和stu2的差集)。
需注意的,两张表选择进行对比的列的数据类型需保持一致,列数也不一致。
1.3.1. 找出两张表的差集(列的数据类型一致)
SELECT ID,NAME,AGE FROM(SELECT id,name,age
FROM stu1 UNION all SELECT id,name,age FROM stu2) GROUP BY ID,NAME,AGE HAVING count(*)=1 ORDER BY ID;在这里插入图片描述
1.3.2. 找出两张表的差集(列的数据类型不一致)
在这里插入图片描述

1.4.MINUS
差集运算,同步数据常用。表结构需保持一致。
1.4.1. 表结构不一致
在这里插入图片描述
在这里插入图片描述

1.4.2. 表结构一致

stu1 在这里插入图片描述
stu2 在这里插入图片描述
SELECT * FROM stu1 MINUS SELECT * FROM stu2;
在这里插入图片描述

1.4.3. 表结构一致(存在空值也可查出)

stu1 在这里插入图片描述
stu2 在这里插入图片描述
SELECT * FROM stu1 MINUS SELECT * FROM stu2;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值