对Oracle minus、intersect、merge使用的理解

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

最近在实现新数据更新旧数据的功能,为了实现这样的目的,走了些弯路,在这里记录下来,以便为今后留个印记。

首先就是利用webservice接口,从某个服务按照更新日期获得最新数据存入临时表;可是数据获得之后,发现有2/3的是和本地已有的数据没有什么差别,那么在让用户取舍数据时,就会带来不必要的工作量;于是决定把和完全相同的数据从临时表中完全删除,只保留与本地有差异的数据;刚开始时想到的就是取一条临时表的数据与本地数据逐个对比,但是有30个字段,写起来很麻烦,会遇到null如何比较的问题,而且效率很低。从网上查了些方法,试用了minus和intersect,在数据完全插入到临时表时,用

select c1,c2...c30 from tbtemp intersect

select c1,c2...c30 from tb

就取出了所有的与本地数据完全相同的数据,然后用delete把这些数据删除掉,就解决了数据重复的问题,而且效率也很高。


下面就要解决另外一个问题,就是从临时表到正式表数据更新的问题,如果已有某个主键,就更新该数据,否则就插入;刚开也是使用先判断是否有,然后再update\insert等,偶然在一本书上看到merge,细看了下,正式我需要的功能--有则更新无则添加,而且用30多万本地数据和1万多临时表数据测试了下,发现性能提高了很多,感觉很高兴;具体语法如下:

MERGE INTO table_name tb1 
USING (table|view|sub_query) tb2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);

具体的网上的例子很多,但是还是自己动手实现了,才能更清楚的理解;

clickhouse(十一、 实时分析优化AggregateFunction及物化视图 ) 文章目录AggregateFunction物化视图原理 AggregateFunction AggregatingMergeTree就有些许数据立方体的意思,它能够在合并分区的时候,按照预先定义的条 件,聚合数据。同时,根据预先定义的聚合函数,计算数据并通过二进制的格式存入表内。将同一分组 下的多行数据,聚合成一行,既减少了数据行,又降低了后续聚合查询的开销。 -- 建表语句 CREATE TABLE agg_table( id String, city String, code Aggregate 阅读详情

相关推荐

掌握SQL集合操作与性能优化技巧

本文深入探讨了SQL中的集合操作,如UNION、INTERSECTMINUS,这些操作符在数据合并、求交集和求差集中的应用,同时介绍了MERGE语句的使用和性能优势,以及TRUNCATE命令的特殊性和使用场景。文章还讨论了ROWNUM伪列和排名功能,解释了如何使用它们在查询中限制行数或获取排名靠前的记录。

weixin_42103128的博客 361

clickhouse 基础知识

转自:https://www.jianshu.com/p/a5bf490247ea   Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS)。 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务。但残酷的是,这种理想情形最终会随着业务的增长走到尽头,查询会变得越来越慢。你可能通过增加更多的内存,订购更快的...

当幸福来敲门的专栏 8453

【Clickhouse那些事】Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库,在项目中也进行了一些实践,但一直都没有一些技术文章的沉淀,近期打算做个系列,通过一些具体的场景将Clickhouse的用法进行沉淀和分享,供大家参考。

killer1989的博客 3334

Oracle-并集、交集、差集(union、union all、intersectminus)的使用方法

oracle并集、交集、差集的使用。union、union all、intersectminus使用详解

msl0202的博客 9750

Oracle中查询结果合并的方法详解

这篇文章主要给大家介绍了Oracle中查询结果合并的方法,利用union合并查询,利用intersect合并查询,利用“union all”合并查询,利用minus合并查询,需要的朋友可以参考下。

xinyuerr的博客 3182

SQL MINUS集合差集运算详解:数据比对与一致性校验实战

MINUS是SQL中用于计算两个结果集差集的集合运算符,本质是返回左查询存在而右查询不存在的去重行,属于关系代数中的集合差(A−B)操作。其核心原理基于位置匹配、自动去重与NULL安全比较,在Oracle、Hive等引擎中提供比NOT EXISTS或LEFT JOIN更简洁、语义更明确的数据差异识别能力。技术价值体现在高可读性、稳定执行计划及强一致性保障,特别适用于金融对账、迁移验证、主数据清洗等需精准识别‘A有B无’场景。本文结合真实生产案例,解析MINUS语法约束、NULL处理哲学、性能锚点及跨数据库降

weixin_34109408的博客 318

SQL MINUS操作符:集合差集语义与整行比对实战指南

在关系型数据库中,集合差集是数据一致性校验、跨系统比对和变更审计的核心需求。其底层原理源于数学集合论,强调行级整体匹配而非字段级条件判断,具备天然去重、严格匹配和NULL安全等特性。相比LEFT JOIN或NOT EXISTS,MINUS(及PostgreSQL/SQL Server中的EXCEPT)以更简洁、语义更精确的方式实现‘A中有而B中完全无’的整行比对,显著提升ETL核验、权限审计与客户流失分析等场景的鲁棒性与可维护性。本文聚焦MINUS的操作本质、类型对齐、NULL处理及跨数据库替代方案,覆盖O

chuozhi7142的博客 328

ORACLE SQL性能优化系列 (十二)

39. 总是使用索引的第一个列 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 译者按: 这也是一条简单而重要的规则. 见以下实例. SQL> create table multiindexusage ( inda number , indb number , descr varchar2(

做一个幸福的人 811

三门外语 精通oracle_《精通Oracle SQL(第2版)》PDF 下载

图书目录:第1章 SQL核心1.1 SQL语言1.2 数据库的接口1.3 SQL*Plus回顾1.3.1 连接到数据库1.3.2 配置SQL*Plus环境1.3.3 执行命令1.4 5个核心的SQL语句1.5 SELECT语句1.5.1 FROM子句1.5.2 WHERE子句1.5.3 GROUP BY子句1.5.4 HAVING子句1.5.5 SELECT列表1.5.6 ORDER BY子句1....

weixin_39631344的博客 413

ORACLE SQL性能优化系列(12)

39. 总是使用索引的第一个列 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 译者按: 这也是一条简单而重要的规则. 见以下实例. SQL> create table multiindexusage ( inda number , indb number , descr varchar2(10)); Table c

netspecial的专栏 812

Oracle sql优化(二)

说明:1谓语,指查询条件 一Oracle架构基础 Oracle数据库指1硬盘上的数据库文件(数据库)2管理这些文件的内存结构(实例) 1总览 2共享池 共享池通过最近最少使用算法保留使用最频繁以及最近使用的语句。 例1:查询v$sql 例2:sql语句使用绑定变量的效果 锁存器 3缓冲区缓存 注:接触计数器每个块都维护一个,表明该块被使用的频繁...

ld705454682的博客 222

oracle temp表空间增长过快的解决方法

本文系转载与互联网,只是为了查看方便。如有不妥,可以随时删除。[@more@]oracle temp表空间增长过快的解决方法经常碰到temp表空间暴涨的问题,以及如何回收临时表空间,由于版本的不同,方法显然也多种多样,但这些方法...

cqcj2023的博客 728

Oracle体系结构篇之数据文件

在开始介绍数据文件之前,我们先先回顾下数据库包含哪些文件? 有参数文件、控制文件、数据文件、重做日志文件、归档日志文件、跟踪文件、口令文件、警告文件等。具体介绍请查看:Oracle体系结构篇之数据库 一、概述 1.1、数据文件 数据文件是指存储数据库中数据的文件,这些“xxxx.dbf”存储着系统数据、数据字典数据、索引数据以及用户存储的数据,所以这部分也是数据库最核心的部分。数据文件大小是灵活的,可以通过设置让它自动扩展,避免了数据量过大但是数据文件空间有限这种状况; 数据文件是专属于一个数据库的

Flychuer的专栏 2573

快速入门到精通:一篇学会Oracle

Oracle全面的基础知识和知识点的举例,帮助初学者快速入门。 SQL语句,SQL查询,Oracle函数,代码块知识,条件判断/循环语句,索引、游标,锁,视图,存储过程,触发器,分区表,Oracle优化,建模

weixin_63021300的博客 4万+

Oracle数据库自带表空间

需求:需要整理现场用户创建的表空间以及其存储数据,进行规范化管理。在整理用户现场建立的表空间时,需要排除掉非用户创建的表空间,所有首先需要那些表空间是用户创建的,那些是Oracle自带的。 本机测试建立一个新库,发现自带表空间如下: 下面对每一个表空间进行简单说明(部分内容引自网络): 1、SYSAUX表空间 SYSAUX表空间在Oracle Database 10g中引入...

weixin_30446613的博客 165

ORACLE - <一战通> - 表空间

一,Oracle 表空间 1,什么是表空间? 数据库与表空间 表空间实际上是数据库上的逻辑存储结构,可以吧表空间理解为数据库中开辟的一个空间,用于存放我们的数据库的对象,一个数据库可以由多个表空间构成。 表空间与数据库文件 表空间实际上是由一个或多个数据文件构成的,数据文件的位置和大小可以由我们用户自己定义。我们所操作的一些表,一些其他的数据对象都是存放在数据文件里的。那么数据文件的是物理存储结构,真正可以看到的,而表空是逻辑存储的结构。 2,表空间的分类 PERM...

阿昊的博客 228
上一篇: 动态sql语句基本语法
下一篇: Silverlight项目发布无法访问WebService接口问题
sciland
博客等级 码龄18年 27粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值