项目中使用到了Oracle的MERGE INTO语句,在这里简单记录下使用方法

使用场景如下:

存在对一张数据量很大的表,你需要对里面的大量数据进行更新,如果数据不存在,就进行插入的操作。

常规想到的办法是先根据条件查询一番,如 果存在,那么就更新,否则就插入?

起始在Oracle9i 后可以用merge into轻轻松松搞定这个问题,避免多次的查询判断以及更新插入操作,而且效率更高

1.merge into简介

用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行SQL(例如UPDATE),无法匹配的执行SQL(例如INSERT)。

这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE

2.merge into语法

MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)

WHEN MATCHED THEN

[UPDATE sql]

WHENNOT MATCHED THEN

[INSERT sql]

;--不要忘记分号

作用:判断B表和A表是否满足ON中条件,如果满足则执行对应sql语句,如果不满足,则执行对应sql语句

另外有说明如下:

  1. Merge操作的只是“操作表”,源表不会有任何变化
  2. Merge的最后结尾必须是以分号结束的,不能忘了分号
  3. 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格
  4. 不一定要把两个操作都写全,可以根据实际情况

3.merge into基础示例

---创建源表
Create Table OriginTable(id Int,caption VarChar(50));
---创建操作表
Create Table TargetTable(id Int,caption VarChar(50));
--插入测试数据
Insert Into OriginTable(id,caption)VALUES(1,'测试1');
Insert Into OriginTable(id,caption)VALUES(2,'测试2');
Insert Into OriginTable(id,caption)VALUES(3,'测试3');
Insert Into OriginTable(id,caption)VALUES(4,'测试4');
Insert Into TargetTable(id,caption)VALUES(1,'目标表匹配到了源表则update1');
Insert Into TargetTable(id,caption)VALUES(2,'目标表匹配到了源表则update2');
Select * from OriginTable;
Select * from TargetTable;MERGE INTO TargetTable
USING OriginTable
ON (TargetTable.id=OriginTable.id) WHEN MATCHED --当上面on后的TargetTable.id=OriginTable.id时,则更新,也可以加上自定义的限制条件 MATCHED AND S.id=2 Then UpDate set TargetTable.caption=OriginTable.caption When Not Matched --目标中没有的id ,在源表中有则插入 Then Insert Values(OriginTable.id, OriginTable.caption) ;--Merge的最后结尾必须是以分号结束的,不能忘了分号 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格

转载于:https://www.cnblogs.com/widget90/p/9031790.html

ORACLE中的MERGE语法使用记录相关推荐

  1. oracle中的merge into用法解析

    oracle中的merge into用法解析 merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([cond ...

  2. Oracle中的MERGE语句

    转自http://blog.chinaunix.net/space.php?uid=16981447&do=blog&cuid=430716 做了简单的格式整理,加入了一点点原创的东西 ...

  3. oracle中触发器的语法,解析Oracle触发器的语法

    导读:触发器是一种特殊的存储过程,触发器的执行不是由程序调用,也不是手工启动,而是由事件来触发,Oracle数据库是大家非常熟悉的数据库系统啦,那么Oracle触发器的语法是怎样的呢?下文中将为大家带 ...

  4. oracle中触发器的语法,Oracle 触发器语法及实例

    Oracle 触发器语法及实例 Oracle触发器语法(一) 一Oracle触发器语法 触发器是特定事件出现的时候,自动执行的代码块.类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用 ...

  5. Oracle中随机抽取N条记录,使用Oracle分析函数随机抽取N条记录

    模拟一个歌曲表,有歌曲ID和作者ID,并且初始化一些数据 create table music( music_id int primary key, userid int ); 模拟一个歌曲表,有歌曲 ...

  6. oracle 查找不重复的数据,oracle不用distinct查找不重复记录和删除重复记录

    1.oracle中怎么不用distinct查找不重复记录,users表有字段userid,username,password? 答: 第一种方法: select userid,username,pas ...

  7. oracle中的open,Oracle中常用SQL操作

    学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实 ...

  8. oracle中负数的四舍五入,oracle中round()四舍五入

    oracle中round()四舍五入 语法: Round 函数 语法为ROUND(number,num_digits) 其中Number是需要进行四舍五入的数字:Num_digits为指定的位数,按此 ...

  9. Oracle中merge into的使用

    http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...

最新文章

  1. 洛谷P2512 糖果传递
  2. 运维基础(10)linux被删数据恢复方法
  3. python函数教程:global 和 nonlocal的详细用法
  4. 深度讲解spring的循环依赖以及三级缓存
  5. 关于计算机与网络导论的论文,计算机科学与导论论文5
  6. The authenticity of host 'github.com (52.74.223.119)' can't be established.
  7. ScriptManager和ClientScriptManager
  8. Html辅助方法(分页、下拉框)
  9. java实现图片base64写入本地
  10. gwr模型matlab代码,干货分享 | 地理加权回归GWR2020新版开源软件下载和使用
  11. JAVA ECXCEL 考勤导入查询
  12. 微信H5开发问题集锦
  13. wifi连接上不能上网怎么办服务器无响应,连接WIFI却不能上网的解决办法
  14. 交叉线 or 直通线 ?
  15. 2022-2028全球军用弩行业调研及趋势分析报告
  16. ORB、SURF、SIFT特征点提取方法和ICP匹配方法
  17. Python学习周记(序列)
  18. PS弧形边缘的去黑色背景色
  19. ​趣约会接入珍爱网风控系统,安全成婚恋交友“护城河”
  20. Excel如何快速合并相同内容单元格

热门文章

  1. javascript 之 面向对象【理解对象】
  2. html5--7-33 阶段练习5
  3. CSS基础---日记4
  4. 何谓成功的软件架构设计
  5. !Important:CSS中!important的作用用于Ie6.0 与Ie7.0、firefox
  6. 2006世界杯赛程表,不能错过:)
  7. Django2.+ path配置
  8. 通过人与人的交互,反思软件系统与软件系统之间的集成交互问题
  9. poj 3090 amp;amp; poj 2478(法雷级数,欧拉函数)
  10. php中的session机制