比如有这么一个表:

create table test02(
id number(8,0) primary key,
name nvarchar2(20),
sal number(5,0)
)

可以这样给它充值:

insert into test02
select rownum,dbms_random.string('*',dbms_random.value(6,20)),dbms_random.value(1000,30000) from dual
connect by level<=200
order by dbms_random.random

然后以此建立一张新表:

create table test03 as select * from test02;

现在 test02,test03内容都是一致的。

但在漫长的生活中,风化和侵袭会导致两者有所不同,下面用更新语句来模拟两者产生的变化:

update test02 set name='bill' where id=1;
update test02 set name='andy' where id=2; update test03 set sal=22222 where id=22;
update test03 set sal=33333 where id=33;
update test03 set sal=44444 where id=44;

这样,两表就产生了五条数据的不同,那么怎么通过sql语句知道不同点呢?可以执行下面SQL:

select t2.*,t3.* from test02 t2 full join test03 t3 on (t2.name=t3.name and t2.sal=t3.sal)
where (t2.id IS NULL or t3.id IS NULL) order by t2.id,t3.id

执行效果:

SQL> select t2.*,t3.* from test02 t2 full join test03 t3 on (t2.name=t3.name and t2.sal=t3.sal)
2 where (t2.id IS NULL or t3.id IS NULL) order by t2.id,t3.id; ID NAME SAL ID NAME SAL
---------- ---------------------------------------- ---------- ---------- ---------------------------------------- ----------
1 bill 11595
2 andy 23646
22 CTCUCDUAOFEDWDOSZJ 24070
33 SRMKTDAHKCSKMU 5758
44 ZCFLYSMOSHYWNX 22652
1 ZUNZKJEEDGTHC 11595
2 SGRNZOIFBMITAMKSYTQE 23646
22 CTCUCDUAOFEDWDOSZJ 22222
33 SRMKTDAHKCSKMU 33333
44 ZCFLYSMOSHYWNX 44444 已选择10行。

如果是两表没有差别呢?让我们以test02为基础创建一个test04来模拟:

create table test04 as select * from test02;

再比较一下:

SQL> select t2.*,t4.* from test02 t2 full join test04 t4 on (t2.name=t4.name and t2.sal=t4.sal)
2 where (t2.id IS NULL or t4.id IS NULL) order by t2.id,t4.id; 未选定行

这便是两表完全一致的情况。

以上的方法也适用于View和查询结果的比较。

--2020年1月29日--

[oracle/Sql]怎样比较两表的差异?的更多相关文章

  1. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  2. [Oracle维护工程师手记]两表结合的MVIEW的告诉刷新

    对两表结合查询建立MVIEW,进行MVIEW的的高速刷新失败,如何处理? 例如: SQL> drop user u1 cascade; User dropped. SQL> grant d ...

  3. 一条SQL语句查询两表中两个字段

    首先描述问题,student表中有字段startID,endID.garde表中的ID需要对应student表中的startID或者student表中的endID才能查出grade表中的name字段, ...

  4. 关于oracle sql语句查询时 表名和字段名要加双引號的问题具体解释

      作为oracle的刚開始学习的人相信大家一定会遇到这个问题.如图:          明明就是navicat可视化创建了表,但是就是不能查到!这个为什么呢?           select * ...

  5. oracle 如何快速删除两表非关联数据(脏数据)?

      1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...

  6. Oracle SQL调优之表设计

    在看<收获,不止sql优化>一书,并做了笔记,本博客介绍一下一些和调优相关的表比如分区表.临时表.索引组织表.簇表以及表压缩技术 分区表使用与查询频繁而更新数据不频繁的情况,不过要记得加全 ...

  7. Oracle SQL——如何用一个表的数据更新另一个表中的数据

    背景 一次处理数据的过程中,需要将表A(源表)的数据更新到表B(目标表)中 前提 两张表一定要有关联字段 使用关联字段联查两张表时,两张表关系必须满足条件:目标表和源表的表间关系一定是多对一或者一对一 ...

  8. 关于oracle sql语句查询时表名和字段名要加双引号的问题详解

    转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...

  9. sql查询比较两表不同数据与相同数据

    以下举例是查询相同数据,否则则相反 方法一: select * from A as x,B as y where x.a1=y.b1 and x.a2=y.b2 and x.a3=y.b3 方法二: ...

随机推荐

  1. C#设计模式之20-状态模式

    状态模式(State Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/425 访问. 状态模式属于行为型 ...

  2. C#LeetCode刷题之#884-两句话中的不常见单词(Uncommon Words from Two Sentences)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3816 访问. 给定两个句子 A 和 B . (句子是一串由空格分 ...

  3. C#LeetCode刷题之#242-有效的字母异位词(Valid Anagram)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4040 访问. 给定两个字符串 s 和 t ,编写一个函数来判断 ...

  4. 手把手教你NLTK WordNet使用方法

    最近看了WordNet,0基础入门,简单记下笔记.因为本身不是学自然语言处理的,好多名词不是特别清楚,现有的博客读的晕乎乎,所以重新写了这个,理清思路.除了行文中提到的链接,其他几个有用的参考链接如下 ...

  5. Who Am I? Personality Detection based on Deep Learning for Texts 阅读笔记

    文章目录 源代码github地址 摘要 2CLSTM 过程 1. 词嵌入 2. 2LSTM处理 3. CNN学习LSGCNN学习LSG 4. Softmax分类 源代码github地址 https:/ ...

  6. MIT 6.828 Lab 1/ Part 2

    Exercise 03 - obj/boot/boot.asm 反汇编文件 截取asm部分文件并注释理解 # Set up the important data segment registers ( ...

  7. SpringBoot 集成SpringSecurity JWT

    目录 1. 简介 1.1 SpringSecurity 1.2 OAuth2 1.3 JWT 2. SpringBoot 集成 SpringSecurity 2.1 导入Spring Security ...

  8. ES7异步函数解决进程等待相关业务问题

    业务需求场景描述: 在接口只能单一检测的情况下,批量检测资源名称是否存在数据库,如果资源群中某一个资源已存在:给出交互让用户决定是否覆盖资源,最后形成不存在的资源和用户确定覆盖的资源群,进行提交. 业 ...

  9. centos iso镜像自动挂载

    vim /etc/fstab 添加如下行:/usr/ison/centos.iso /media/cdrom iso9660 defaults,loop 0 0

  10. Vue中keep-alive组件的理解

    对keep-alive组件的理解 当在组件之间切换的时候,有时会想保持这些组件的状态,以避免反复重渲染导致的性能等问题,使用<keep-alive>包裹动态组件时,会缓存不活动的组件实例, ...