oracle两个表数据⽐较,oracle数据库两表数据⽐较
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得到结果oracle数据库表结构怎么看
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函数的认识。
使⽤exp/imp 在oracle数据库间导数据
最近⼯作需要将oracle数据库的表数据导出到另⼀个oracle数据库表,到了oracle ⾃带的命令⾏,并记录下导数据过程. 导数据过程分以下⼏步: 假设源数据库为A,⽬标数据库为B 1.在B上通 ...
oracle 两表数据对⽐---minus
1 引⾔ 在程序设计的过程中,往往会遇到两个记录集的⽐较.如华东电⽹PMS接⼝中实现传递⼀天中变更(新增.修改.删除)的数据.实现的⽅式有多种,如编程存储过程返回游标,在存储过程中对两批数据进 ...
Oracle数据库创建表是有两个约束带有默认索引
Oracle数据库创建表是有两个约束带有默认索引.1.主键primary Key:唯⼀索引.⾮空2.唯⼀Unique:唯⼀索引,可以是空值如果没有设定主键和唯⼀约束,表中不会有默认索引的. 建⽴主键/ ...
定时从远程的数据库中取数据,然后把取出来的数据插⼊或更新本地的oracle数据库的表
最近项⽬中有⼀种需求: ⼤致需求是这样的 通过给定的 ⽤户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插⼊或更新本地的oracle数据库的表 项⽬的结构式struts1 hibernat ...
Oracle 数据库整理表碎⽚
Oracle数据库中的数据出错的解决办法
Oracle数据库四种数据完整性约束
Oracle数据库四种数据完整性约束 1.实体完整性 同样的数据不能重复插⼊(1)采取什么措施保证实体完整性?我们可以给表创建主键约束吗,主键保证了数据的唯⼀性,主键可以保证同⼀条记录只能插⼊⼀次. ...
将Oracle数据库中的数据写⼊Excel
将Oracle数据库中的数据写⼊Excel 1.准备⼯作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
随机推荐
C++-⽂件【1】-按⾏读⽂本⽂件的两种⽅法
测试环境—— 系统:Win7 64bit 编译器:TDM-GCC 4.9.2 64-bit Release #include #include
如何让ConfigurationManager打开任意的配置⽂件
VisualStudio的配置⽂件很好很强⼤,⽤来保存数据库连接字符串或键值对都⾮常⽅便,只需要通过ConfigurationManager的ConnectionStrings或AppSettings ...
(转)css3-box-sizing属性详解
box-sizing是CSS3的box属性之⼀.⼀说到CSS的盒模型(Box model)我想很多⼈都会⽐较烦,特别是对于新⼿,然⽽这个Box model⼜是我们CSS运⽤中⽐较重要的⼀个属性.那么C ...
[BZOJ3872][Poi2014]Ant colony
[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...
SQL2000和SQL2005和SQL2008同时安装问题
原⽂:SQL2000和SQL2005和SQL2008同时安装问题 SQL2000和SQL2005和SQL2008同时安装问题 1,因为SQL2000安装过程中⽆法修改实例名称,故安装过程中必须先安装S ...
第8章BOM笔记
第⼋章 BOM ⼀. Window 在浏览器中window有双重⾓⾊,他既是JavaScript访问浏览器窗⼝的⼀个借⼝,⼜是ECMAscript 规定的Global 对象. 1.全局作⽤域 由于win ...
php __FILE__,__CLASS__等魔术变量,及实例
今天突然看到⼏个⾃⼰不认识的魔术变量 不知道怎么⽤于是就上⽹查了⼀下,看到了这篇博客,写的真不错,希望⾃⼰以后也能学会这样总结张映 发表于 2010-12-13 分类⽬录: php 标签:php,  ...
Counting Stars
I/O流
(三)—Linux⽂件传输与mysql数据库安装
⽂件传输⼯具使⽤    为了速成,关于linux系统的学习都先放⼀放,⽤到哪个知识点就查哪个,这⾥想在linux下装⼀些服务练练⼿,最先想到的就是装个mysql数据库试试. 因为我⽤的是虚拟机下的li ...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。