[oracle/Sql]怎样比较两表的差异?
比如有这么一个表:
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]怎样比较两表的差异?的更多相关文章
- [转]关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...
- [Oracle维护工程师手记]两表结合的MVIEW的告诉刷新
对两表结合查询建立MVIEW,进行MVIEW的的高速刷新失败,如何处理? 例如: SQL> drop user u1 cascade; User dropped. SQL> grant d ...
- 一条SQL语句查询两表中两个字段
首先描述问题,student表中有字段startID,endID.garde表中的ID需要对应student表中的startID或者student表中的endID才能查出grade表中的name字段, ...
- 关于oracle sql语句查询时 表名和字段名要加双引號的问题具体解释
作为oracle的刚開始学习的人相信大家一定会遇到这个问题.如图: 明明就是navicat可视化创建了表,但是就是不能查到!这个为什么呢? select * ...
- oracle 如何快速删除两表非关联数据(脏数据)?
1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...
- Oracle SQL调优之表设计
在看<收获,不止sql优化>一书,并做了笔记,本博客介绍一下一些和调优相关的表比如分区表.临时表.索引组织表.簇表以及表压缩技术 分区表使用与查询频繁而更新数据不频繁的情况,不过要记得加全 ...
- Oracle SQL——如何用一个表的数据更新另一个表中的数据
背景 一次处理数据的过程中,需要将表A(源表)的数据更新到表B(目标表)中 前提 两张表一定要有关联字段 使用关联字段联查两张表时,两张表关系必须满足条件:目标表和源表的表间关系一定是多对一或者一对一 ...
- 关于oracle sql语句查询时表名和字段名要加双引号的问题详解
转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...
- sql查询比较两表不同数据与相同数据
以下举例是查询相同数据,否则则相反 方法一: select * from A as x,B as y where x.a1=y.b1 and x.a2=y.b2 and x.a3=y.b3 方法二: ...
随机推荐
- 常哥带你认识NoSQL和Redis的强大
各位朋友,这篇文章是针对Redis快速了解的内容,为了学好Redis在这里首先跟大家聊聊NoSQL相关内容,有了概念和方向后,我们再学习Redis大家会感觉得心应手. [公众号dotNet工控上位机: ...
- 洛谷 P4198 楼房重建
思路 此题可转化为以下模型 给定序列\(a[1...n]\),支持单点修改,每次求区间单调栈大小 \(n,Q\le 10^5\) 区间单调栈是什么呢?对于一个区间,建立一个栈,首先将第一个元素入栈,从 ...
- 【LifecycleException】: org.apache.catalina.LifecycleException: A child container failed during start 解决
看了好多种解决方案: 第一种:从tomcat remove project -> clean project -> reboot project; 第二种:说用到的 jasper jsp解 ...
- Vue 内联模板(inline-template)
内联模板不会把子组件的内容分发渲染到父组件中 而是需要在父组件中实现其内容的渲染 父组件 <template> <div> <template-inline inline ...
- 01从DataGrid中导入到Excel
01网络上有很多导出数据到Excel的方法,我在网上找到了一种比较简单实用的方法(参考了网友的方法) string fileName = ""; Microsoft.Win32.S ...
- Ubuntu无法安装 英伟达显卡
安装Ubuntu无法正常驱动英伟达,这时需要在启动参数中添加nomodset 如果不会添加参数可以参考这篇文章:安装ubuntu时黑屏三种解决办法
- NodeJs+Express+SqlServer简易后台API服务搭建
首先安装nodejs 第一步 创建node项目配置package.json如下 express 使用方法可参考http://www.runoob.com/nodejs/nodejs-express-f ...
- 使用css设置边框背景图片
使用css的特有属性,给不同的盒子添加边框图片. 为什么会有这一场景呢.因为,UI给我们前端的边框图片可能未必适合我们当前的内容. 这里我们主要使用到的属性有: border-image-source ...
- 理解正向代理&反向代理
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中.由于外部网络上的主机并不会配置并使用这个 ...
- Linux环境安装Docker入门教程
安装 下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.tgz 解压 tar -xvf ...