`
wbw3wbw
  • 浏览: 45731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

两表数据对比---minus .

阅读更多

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的为“修改”的数据。

 

原文地址:http://blog.sina.com.cn/s/blog_3ff4e1ad0100tdl2.html

分享到:
评论

相关推荐

    Oracle中比对2张表之间数据是否一致的几种方法

    当两张表的数据结构完全相同,并且其中一张表所在数据库版本为Oracle 11g及以上时,可以使用`dbms_comparison`包来进行数据对比。此包提供了非常便捷的方式来检测两表之间的差异。 ##### 实现步骤 1. **创建测试表...

    使用MINUS实现差值运算.rar

    这个知识点对于数据库管理和数据分析至关重要,尤其是在处理复杂的数据对比和过滤场景时。下面我们将深入探讨如何使用MINUS来实现差值运算,并结合实际例子进行解释。 首先,MINUS操作符的基本用法是将一个查询结果...

    union,minus和intersect关系

    在数据库查询语言SQL中,`UNION`、`MINUS`和`INTERSECT`是三种用于合并或对比多个查询结果集的关键字,它们在数据处理和数据分析中扮演着重要的角色。下面,我们将深入探讨这三种操作符的概念、用法以及它们之间的...

    Fama-French-Replication.R_三因子模型_

    这个模型扩展了资本资产定价模型(CAPM),增加了市场风险之外的两个额外的风险因素,以更好地解释股票收益的差异。Fama-French三因子模型的三个因子包括: 1. **市场因子(Market Factor, Mkt-RF)**:这是CAPM中...

    学习笔记之Oracle教程(免费).pdf--超详细

    - **集合运算**:解释了如何使用UNION、INTERSECT、MINUS等操作符来处理多个查询结果集。 #### 数据字典 - **视图**:定义了视图的概念及其创建方法。 - **索引**:阐述了索引的作用和创建方式。 - **序列、同义词...

    Oracle不同数据库间对比分析脚本

    此脚本的主要功能是帮助用户在两个不同的Oracle数据库环境中进行对象级别的对比,包括但不限于表、视图、存储过程等数据库对象的状态差异。 #### 二、脚本背景与目的 在日常的数据库维护工作中,经常会遇到需要对比...

    oracle找回删除的数据

    2. **使用`MINUS`操作符**:通过对比两个时间点的数据差异来找出被删除或更改的数据行。 ### SQL示例代码详解 根据提供的SQL代码示例,我们可以进一步理解如何实现上述操作: #### 示例代码解析 ```sql SELECT *...

    Minus.js:UI开发人员React性的实验

    2. **状态管理**:探索Minus.js如何简化React应用中的状态管理,对比其他解决方案如Redux或MobX。 3. **React Hooks**:如果Minus.js利用了Hooks,那么你需要了解如何使用`useState`、`useEffect`等钩子函数来管理...

    ORACLE技巧 - 不同记录集的横向合并

    在处理数据库操作时,经常需要对比两个记录集的差异,例如比较原先输入的订单数据与之后更新的订单数据之间的不同之处,并将这些差异展示给用户查看。在Oracle数据库环境中,可以通过多种方式来实现这一目标,包括...

    oracle常见面试题.docx

    1. 数据库对比:SQL2005是微软的RDBMS,适用于中型应用,不跨平台;Oracle是ORACLE公司的ORDBMS,支持大规模数据存储、分布式部署、多用户及跨平台,适用于大型企业。 2. 数据库设计与导入导出:使用PowerDesigner...

    oracle cdc教程

    - **全面数据对比**:通过对比两个不同时间点的数据全貌来发现差异。 这三种方式各有优劣,其中时间戳方式由于其实现相对简单,是目前应用较为普遍的一种方式。在 Oracle 数据库中,推出了两种主要的 ETL 方案:一...

    ORACLE日常操作手册.doc

    - **管理表空间**: 包括扩展和缩减数据文件、在线/离线表空间等操作。 - **管理数据文件**: 如添加新的数据文件、更改数据文件大小等。 - **查看表空间的使用情况**: 使用`DBA_FREE_SPACE`视图等方法监控表空间利用...

    Oracle数据库应用教程--子查询与高级查询.pptx

    集合操作符如UNION、INTERSECT和MINUS也用于合并或对比多个查询结果集。 掌握这些概念和操作是Oracle数据库管理员和开发人员的基础,它们能帮助处理复杂的数据查询和分析,提高数据处理效率。通过实践和理解这些...

    Musk数据集 使用PCA和SVD方法进行特征提取 并报告获得的特征值以及特征向量结果

    在此数据集上分别使用PCA和SVD方法进行特征提取,并报告获得的特征值以及特征向量结果,对数据属性进行分析,使用盒图分别对获得的最优属性进行分析和对比。 import pandas as pd import os from numpy import * ...

    Fama三因子选股的python实现

    该模型引入了市场因子、规模因子(Small-minus-Big, SMB)和价值因子(High-minus-Low, HML)来解释股票收益的差异,旨在揭示在CAPM的基础上,小市值公司和高账面市值比(Book-to-Market Ratio, BM)公司的股票通常...

    oracle SQL查询和SQL函数手册 基本涵盖了常用的

    - **集合操作** 包括UNION, INTERSECT, MINUS,用于合并或对比两个查询的结果集。 - **自连接** 一个表自身进行的连接,用于处理复杂的关系。 5. **索引和性能优化** - **索引** 是提高查询速度的关键,有B树...

    Oracle数据库、SQL

    - **集合运算符** 如`UNION`, `INTERSECT`, `MINUS`用于合并或对比不同查询的结果。 12. **排名分页** - **ROWNUM** 属性用于获取数据的行号,配合WHERE或HAVING进行分页。 13. **约束和事务** - **约束** 包括...

    fama-french three factors_stata_三因子_三因子模型_fama-french_fama-frenc

    该模型包含三个主要因素:市场风险因素(Market)、小市值因子(Small-minus-Big,SMB)和高市净率因子(High-minus-Low,HML)。在Stata软件中,我们可以运用统计方法对这三因素进行分析,以理解股票收益与这些因素...

    超详细Oracle教程.pdf

    - **复合数据类型**:探讨如何使用ROWTYPE、RECORD、TABLE等复合数据类型构建复杂的表结构。 - **LOB类型**:讲解BLOB、CLOB、NCLOB等大对象类型的应用场景。 #### 十二、Oracle体系结构(DBA) - **物理结构**:详细...

    数据库系统概论-第三章关系数据库标准语言SQL续1.ppt

    3.4.4 集合查询:集合查询涉及集合操作,如并集(UNION),交集(INTERSECT)和差集(SET MINUS),用于合并或对比多个查询结果集。 3.4.5 SELECT语句的一般形式:SELECT语句包括选择列、表源、条件、排序和分组等组成...

Global site tag (gtag.js) - Google Analytics