ORACLE中的MERGE语法使用记录
2024-08-27 14:08:33
项目中使用到了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的最后结尾必须是以分号结束的,不能忘了分号 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格
最新文章
- ASP.NET Core 中文文档 第三章 原理(7)配置
- [开源ORM] SqliteSugar 3.x .net Core版本成功上线
- 根据搜素的字符串改变label包含该字符串的文字
- javascript世界一等公民—函数
- strtol()函数
- Session过期,跳出iframe等框架
- HDU2037 今年暑假不AC 贪心算法
- 图形混合模式 PorterDuff Xfermodes
- 设置JQuery的Ajax方法同步
- activemq的安装与使用
- java 如何将 word,excel,ppt如何转pdf --openoffice (1)
- mysql导出数据至指定文件的命令
- java网络爬虫基础学习(一)
- Redis Windows 64位下安装Redis详细教程
- nodeJs的Buffer操作
- 英雄联盟lol登录错误:登录服务器未响应、您可能遇到了一个网络问题、请检查您的网络。
- CentOS查看版本及架构信息
- Mysql 之多实例 安装以及配置
- QQ登录整合/oauth2.0认证-03-对第二节的代码改进
- C语言之非常简单的几道题
热门文章
- Python 的基本运算和内置函数
- WSDL接口数据传递以及外网发布需要注意的地方
- HTML输入验证提示信息
- redis实践一些要注意的事项
- RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡(转)
- Repository、IUnitOfWork 和 IDbContext
- org.apache.jasper.compiler.TldLocationsCache tldScanJar
- srping mvc学习
- Kafka具体解释五、Kafka Consumer的底层API- SimpleConsumer
- 关于web上文章移植伴随的样式问题