ORACLE中的MERGE语法使用记录
项目中使用到了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语句
另外有说明如下:
- Merge操作的只是“操作表”,源表不会有任何变化
- Merge的最后结尾必须是以分号结束的,不能忘了分号
- 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格
- 不一定要把两个操作都写全,可以根据实际情况
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 setTargetTable
.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语法使用记录相关推荐
- oracle中的merge into用法解析
oracle中的merge into用法解析 merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([cond ...
- Oracle中的MERGE语句
转自http://blog.chinaunix.net/space.php?uid=16981447&do=blog&cuid=430716 做了简单的格式整理,加入了一点点原创的东西 ...
- oracle中触发器的语法,解析Oracle触发器的语法
导读:触发器是一种特殊的存储过程,触发器的执行不是由程序调用,也不是手工启动,而是由事件来触发,Oracle数据库是大家非常熟悉的数据库系统啦,那么Oracle触发器的语法是怎样的呢?下文中将为大家带 ...
- oracle中触发器的语法,Oracle 触发器语法及实例
Oracle 触发器语法及实例 Oracle触发器语法(一) 一Oracle触发器语法 触发器是特定事件出现的时候,自动执行的代码块.类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用 ...
- Oracle中随机抽取N条记录,使用Oracle分析函数随机抽取N条记录
模拟一个歌曲表,有歌曲ID和作者ID,并且初始化一些数据 create table music( music_id int primary key, userid int ); 模拟一个歌曲表,有歌曲 ...
- oracle 查找不重复的数据,oracle不用distinct查找不重复记录和删除重复记录
1.oracle中怎么不用distinct查找不重复记录,users表有字段userid,username,password? 答: 第一种方法: select userid,username,pas ...
- oracle中的open,Oracle中常用SQL操作
学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实 ...
- oracle中负数的四舍五入,oracle中round()四舍五入
oracle中round()四舍五入 语法: Round 函数 语法为ROUND(number,num_digits) 其中Number是需要进行四舍五入的数字:Num_digits为指定的位数,按此 ...
- Oracle中merge into的使用
http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...
最新文章
- 洛谷P2512 糖果传递
- 运维基础(10)linux被删数据恢复方法
- python函数教程:global 和 nonlocal的详细用法
- 深度讲解spring的循环依赖以及三级缓存
- 关于计算机与网络导论的论文,计算机科学与导论论文5
- The authenticity of host 'github.com (52.74.223.119)' can't be established.
- ScriptManager和ClientScriptManager
- Html辅助方法(分页、下拉框)
- java实现图片base64写入本地
- gwr模型matlab代码,干货分享 | 地理加权回归GWR2020新版开源软件下载和使用
- JAVA ECXCEL 考勤导入查询
- 微信H5开发问题集锦
- wifi连接上不能上网怎么办服务器无响应,连接WIFI却不能上网的解决办法
- 交叉线 or 直通线 ?
- 2022-2028全球军用弩行业调研及趋势分析报告
- ORB、SURF、SIFT特征点提取方法和ICP匹配方法
- Python学习周记(序列)
- PS弧形边缘的去黑色背景色
- ​趣约会接入珍爱网风控系统,安全成婚恋交友“护城河”
- Excel如何快速合并相同内容单元格