本文转自http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html

1 引言

在程序设计的过程中,往往会遇到两个记录集的比较。如华东电网PMS接口中实现传递一天中变更(新增、修改、删除)的数据。实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等等。

本文主要讨论利用ORACLE的MINUS函数,直接实现两个记录集的比较。

2 实现步骤

假设两个记录集分别以表的方式存在,原始表为A,产生的比较表为B。

2.1 判断原始表和比较表的增量差异

利用MINUS函数,判断原始表与比较表的增量差异。

此增量数据包含两部分:

1)原始表A有、比较表B没有;

2)原始表A和比较表B都有,但是某些字段发生了改变。

2.2 判断比较表与原始表的增量差异

利用MINUS函数,判断比较表与原始表的增量差异。

此增量数据包含两部分:

1)比较表B有、原始表A没有;

2)比较表B和原始表A都有,但是某些字段发生了改变。

2.3 得出结果集

利用SQL语句中的对两种增量差异的处理,实现判别出比较表相对于原始表是进行了“插入”、“修改”、“删除”的情况。

3 实例演练

3.1创建表并插入数据

Create table A(A1 number(12),A2 varchar2(50));
Create table B(B1 number(12),B2 varchar2(50));
Insert Into A Values (1,'a');
Insert Into A Values (2,'ba');
Insert Into A Values (3,'ca');
Insert Into A Values (4,'da');
Insert Into B Values (1,'a');
Insert Into B Values (2,'bba');
Insert Into B Values (3,'ca');
Insert Into B Values (5,'dda');
Insert Into B Values (6,'Eda');
COMMIT;

3.2进行增量差异数据比较

3.2.1原始表A与比较表B的增量差异

Select * from A minus select * from B;

结果如下:

A1           A2
---------------------------------------------------------------
            2          ba
            4          da

3.2.2比较表B与原始表A的增量差异

Select * from B minus select * from A;

结果如下:

B1            B2
---------------------------------------------------------------
            2            bba
            5            dda
            6            Eda

3.2.3两种增量差异的合集

此合集包含3类数据:

--1、原始表A存在、比较表B不存在,属于删除类数据,出现次数1

--2、原始表A不存在、比较表B存在,属于新增类数据,出现次数1

--3、原始表A和比较表B都存在,属于修改类数据,出现次数2

Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A);

结果如下:

A1                   A2               T
------------- -------------------------------------------------- ----------
            2                   ba                1
            2                   bba               2
            4                   da                1
            5                   dda               2
            6                   Eda               2

3.3得到结果

Select A1,sum(t) from
(Select A1,A2,1 t from (Select * from A minus select * from B) union
Select B1,B2,2 t from (Select * from B minus select * from A))
Group by A1;

结果如下:

A1     SUM(T)
-----------------------
            6          2
            2          3
            4          1
            5          2

结果中SUM(T)为1的为“删除”的数据,SUM(T)为2的为“新增”的数据,SUM(T)为3的为“修改”的数据。

4 分析

4.1实现分析

在两个结果集比较的过程中,减少原始表和比较表比较的字段数目以及原始表和比较表的数据量都可以提高效率。

5 总结

此比较方法在执行效率上,可能不是非常好,但是能解决效率要求并不太高的问题。在实现上利用了Oracle的minus函数,此文在于引起大家对于Oracle函数的认识。

转载于:https://www.cnblogs.com/abc8023/p/4917583.html

oracle数据库两表数据比较相关推荐

  1. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  2. oracle数据库迁移部分表,oracle 数据库之间 表数据的 迁移

    主要是 需要将 正式环境的数据库 和测试环境的数据库的 表 数据同步一下,方便测试. 这样的效果, 可以使用 数据库的 备份 , exp imp 等其他的方式, 可是这样的方式, 需要 在 电脑里面 ...

  3. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  4. oracle 两表数据对比---minus

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  5. oracle 二表做差,oracle 两表数据对比---minus

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  6. oracle两表交集查询,Oracle对两个数据表交集的查询

    正在看的ORACLE教程是:Oracle对两个数据表交集的查询. Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大.灵活和复杂的系统,据说,在使用oracle时应有这样的思想 ...

  7. oracle导出clob表数据及表结构,数据库导出clob数据

    PL/SQL Developer导入导出数据库方法及说明 PL/SQL Developer是Oracle数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和 ...

  8. Oracle 数据库整理表碎片

    Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎 ...

  9. jpi多表联查_数据库两表联查、多表联查,多重联查

    表连接查询 [小编用的是Oracle数据库,Oracle数据库区分表名与字段名的大小写,所以大家进行查询的时候记得注意双引号哟~] 有表 表名:AAA 字段: id name tag 表名:BBB 字 ...

最新文章

  1. elk系列7之通过grok分析apache日志
  2. 猜拳游戏c语言代码流程图,这是一个猜拳游戏的程序 大家有更好的解决方法么?...
  3. linux命令gcc常用选项
  4. 六十七、二分查找算法及其四个变形问题
  5. lisp 绘制立体感的五角星_几何作图的方法、例子、解答及札记
  6. 如何通过outlet在SAP Spartacus的产品明细页面插入自定义UI
  7. 没有它,我们寸步难行——LBS的渊源与实践
  8. 【操作系统】存储器管理01-思维导图
  9. linux下简单的邮件配置
  10. Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
  11. Javascript作用域、闭包原理以及性能问题
  12. 【Hoxton.SR1版本】Spring Cloud Bus消息总线
  13. 计算机中的查找快捷键,Excel搜索快捷键如何在excel中快速找到所需信息
  14. nfc卡模式与标准模式_解析目前NFC具有的三种工作模式
  15. 【CSP-S 2019模拟】题解
  16. 虚拟机安装或卸载时,无法打开注册表项问题
  17. access筛选末位数字为1或5_数字鸿沟理论不会用?北大必考常考,我们以快手短视频为例...
  18. 如何在腾讯地图绘制自己的坐标
  19. iOS中的3种卡顿检测
  20. C++之char , signed char , unsigned char(转)

热门文章

  1. android8.1通知,在Android 8.1 API 27上,通知不会显示
  2. uap连接oracle,UAP环境初始化操作手册Oralce版.pdf
  3. MySQL命令梳理_MySQL操作命令梳理(1)
  4. palapa php,有什么办法可以在Android上运行PHP
  5. redis源码分析 ppt_Redis源码分析之客户端+数据库
  6. 画好原理图的几个技巧
  7. 测试你C语言水平的十道题,挑战一下?
  8. 北京科技大学计算机专业评估,北京科技大学王牌专业有哪些
  9. java多线程安全解决方案_java常用知识:多线程安全问题的解决方法-Lock锁
  10. top统计mysql性能_mytop安装,使用mytop监控MySQL性能