ORACLE 进阶(十一)MERGE INTO 学习总结
一、前言
在工作中,查看到类似于如下的 SQL 语句:
复制代码
MERGE
语句是Oracle9i
新增的语法,用来合并UPDATE
和INSERT
语句。通过MERGE
语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE
,无法匹配的执行INSERT
。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE
。
例如,有一个表 T,有两个字段 a、b,我们想在表 T 中做Insert/Update
,如果条件满足,则更新 T 中 b 的值,否则在 T 中插入一条记录。在 Microsoft 的 SQL 语法中,很简单的一句判断就可以了,SQL Server
中的语法如下:
复制代码
Oracle 中,要实现相同的功能,要用到Merge into
来实现(Oracle 9i 引入的功能),其语法如下:
复制代码
严格意义上讲,在一个同时存在Insert
和Update
语法的Merge
语句中,总共Insert/Update
的记录数,就是Using
语句中 alias2 的记录数”。所以,要实现上面的功能,可以这样写:
复制代码
二、演示
复制代码
2.1 基本功能
2.1.1 matched 和 not matched clauses 同时使用
复制代码
2.1.2 只有 not matched clause,也就是只插入不更新
复制代码
2.1.3 只有 matched clause, 也就是只更新不插入
复制代码
三、10g 增强介绍
3.1 条件操作
3.1.1 matched 和 not matched clauses 同时使用
复制代码
3.1.2 只有 not matched clause,也就是只插入不更新
复制代码
3.1.3 只有 matched clause, 也就是只更新不插入
复制代码
3.1.4 删除操作
复制代码
四、注意
MERGE
语句的UPDATE
不能修改用于连接的列,否则会报错(on 后面的条件列就是联接);using
后面可以是(SELECT msid ,areacode FROM subs GROUP by msid
);
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/1dd44ed517b82fd608b783a4a】。文章转载请联系作者。
评论