对比两张表的差异
create table foo(
id int primary key,
name varchar(50)
);
create table bar(
id int primary key,
name varchar(50)
);
insert into foo(id,name) values
(1,'a'),
(2,'b');
insert into bar(id,name) values
(1,'a'),
(2,'c');
方式一:
使用except查找两张表的差异:数据出现第一个结果集中但不在第二个结果集中的
即:查询出现foo表中,但不出现在bar表中
select id ,name,'not in bar' as note from foo
except
select id,name,'not in bar' as note from bar;
或:'not in bar' as note 只是作为一列用来说明的,可有可无
select id ,name from foo
except
select id,name from bar;
结果:
id name
2 b
查询出现bar表中,但不出现在foo表中
select id ,name from bar
except
select id,name from foo;
结果:
id name
2 c
方式二:
使用完全外部连接查询两张表(两张表的列名此例中是一致的,实际中也可以自我决定)的差异:
1、查询两张表中的所有行,同时去重复的行
select id,name from foo full outer join bar using(id,name);
结果:
id name
1 a
2 b
2 c
2、因为bar的ID没有null的值,所有过滤条件bar.id is null就相当于排除了bar表的数据;
只显示foo表的数据,且不包括两表都存在的数据
select id,name from foo full outer join bar using(id,name)
where bar.id is null;
结果:
id name
2 b
3、因为foo的ID没有null的值,所有过滤条件foo.id is null就相当于排除了foo表的数据;
只显示bar表的数据,且不包括两表都存在的数据
select id,name from foo full outer join bar using(id,name)
where foo.id is null;
结果:
id name
2 c
4、使用or接连排除掉不在foo表中的数据和不在bar表中的数据,即两表的各自不同的数据都显示出来
select id,name from foo full outer join bar using(id,name)
where foo.id is null or bar.id is null;
结果:
id name
2 b
2 c
5、查看两表各自拥有且不同的数据有多少行数据
select count(*) from foo full outer join bar using(id,name)
where foo.id is null or bar.id is null;
结果:
2
PostgreSQL对比两张表的差异
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 结论: 与普通表比较,内存表的性能提升不明显; 与普通表比较,无日志表在插入时性能提高约1倍、更新和删...
- 使用 minus 关键字(minus:差别,缺少) 场景: 对一个表删除时,未做记录,导致两个表数据不一致。 搞定~
- CREATE OR REPLACE PACKAGE PKG_TEST IS--******************...
- 刘辉,虹霖品牌战略咨询项目总监 定位理论中有9大差异化,这9大差异化几乎涵盖了各种常见的定位案例,也是众多品牌行之...