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的最后结尾必须是以分号结束的,不能忘了分号 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格
ORACLE中的MERGE语法使用记录的更多相关文章
- 在oracle中使用merge into实现更新和插入数据
目录 oracle中使用merge into DUAL表解释 使用场景 用法 单表 多表 oracle中使用merge into DUAL表解释 在Oracle数据库中,dual是Oracle中的一个 ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- oracle中查找和删除重复记录的几种方法总结
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...
- Oracle 中按条件过滤重复记录
在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...
- Oracle中查询前10条记录
在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 ----说明:rownum只能用于<或<=运算,如 ...
- 关于Oracle中Sort Merge Join的改写
业务场景的问题,我们有一个刷CUBE的SQL,是Oracle环境,平时跑70多分钟, 但是最近突然不动了,这个SQL需要算累计值,比如年累计客户数量. 累计值是什么意思呢?我们使用下面的数据来说明问题 ...
- Oracle中查询和删除相同记录的3种方法
--创建测试表 )); ,'); ,'); ,'); ,'); ,'); ,'); commit; select * from test; --查询相同记录 ); select id,name fro ...
- 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战
转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...
- 转:Oracle中merge into的使用
最近项目上使用Oracle的Merge,所以找来一下资料学习了解. 该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和I ...
随机推荐
- Android之——ContentResolver查询的三种方式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47785491 今天做到一个小项目.查询手机中短信的信息,当然得去系统暴露出来的数据 ...
- <转>大白菜的后门
转自360论坛
- .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类
.Net基础——程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll ...
- 微信支付和微信支付通知基于sdk的说明
前提是,有微信服务号(必须开通了支付功能,也就是说有了商户后台) (注意商户后台 安全目录 的设置,不然即使你写的没错误,也调用不成功) 公众号h5页面写法: (购物车提交--我们上一步已经生成了订 ...
- Java 8 日期时间API使用介绍
如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...
- <LeetCode OJ> 26 / 264 / 313 Ugly Number (I / II / III)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++ 1. 查找nas的原理1 2. 与dlna的关系1 3. 与ssdp的关系1 4. Cling - Ja ...
- 非侵入式Ajax
基本准备 首先,新建一个ASP.NET MVC 3的空项目. 然后新增一个Model,代码如下: using System; using System.Collections.Generic; usi ...
- Elasticsearch5.X IN Windows 10 系列文章(2)
ElasticSearch版本: 5.5.1 (最新稳定版为5.5.2),由于用到IK中文分词插件,最新版本没有5.5.2 ,所以使用5.5.1 日期:2017-08-29 第二章:安装Kibana ...
- cookie做订单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...