Oracle 的merge into 用法
1.merge into的用途
Merge是一个非常有用的功能,与DB2中的merge into功能几乎一样,与Mysql里的insert into on duplicate key也很类似。MERGE INTO 是Oracle 9i以后才出现的新的功能。简单来说可以是一个“有则更新,无则插入”的功能。
通过Merge into你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表 。
2.Merge into的基本语法
语法如下 :
MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN [merge_update_clause ]
WHEN NOT MATCHED THEN [merge_insert_clause];
通俗点就是如下的语法
MERGE INTO [表名] [表别名]
USING ( [查询内容] )[或者像表查询一样的语句]
ON ([条件表达式] AND [...]...)
WHEN MATHED THEN [匹配的update操作]
WHEN NOT MATHED THEN [不匹配的insert操作]
举个例子看看:
merge into Students st using newStudents nst on (st.id = nst.id)
when matched then
update set st.name = nst.name
when not matched then
insert values(nst.id, nst.name, nst.sex)
前面的merger into Students using newStudents 意思是用newStudents表来merge到Students表,匹配关系就是根据on后面的条件子句的内容,这里根据两个表的id来进行匹配,那么匹配上了我们的操作是就是when matched then的子句里的动作了,这里的动作是update set st.name =nst.name, 就是把newStudents里的name,赋值到Students的name里。如果没有匹配上则insert这样的一条语句进去。通过这个简单的小例子,这个merget inot的用法还是比较容易理解的。这里merger into的功能,好比比较,然后选择更新或者是插入,像是武术套路的一套组合拳。在做merge into的时候,这样同样的情况下,merge的性能是优于同等功能的update/insert语句的。有分析说merge into是单纯的insert/update效率的好几倍,本人没有考究过,不做评论 。
3.Oracle 10g后的改进
在Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
Oracle 的merge into 用法的更多相关文章
- oracle中merge的用法,以及各版本的区别 Create
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个 ...
- Oracle中Merge into用法总结
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执 ...
- oracle中merge into用法解析
merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] an ...
- SQL2008中Merge的用法
在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...
- Oracle 使用MERGE INTO 语句更新数据
/*Merge into 详细介绍MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配 ...
- SQL2008中Merge的用法(轉載)
在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...
- SQL2008中Merge的用法(转)
在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...
- Oracle Merge Into 用法详解
原文:http://blog.csdn.net/EdgenHuang/article/details/3587912 Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行in ...
- Oracle之Merge用法
Merge用来从一个表中选择一些数据更新或者插入到另一个表中.而最终是用更新还是用插入的方式取决于该语句中的条件. 下面我们简单的举一个例子: SQL)) 表已创建. SQL)) 表已创建. SQL, ...
随机推荐
- 用vs2010调试javascript
操作步骤如下: 1. javascript代码中插入:debugger,如下: <script type="text/javascript"> debugger; ...
- Web Service学习笔记
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- (DT系列四)驱动加载中, 如何取得device tree中的属性
本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属性是如何取得的.一:系统级初始化DT_MACHINE_START 主要是定义"struct m ...
- GRUB损坏后,如何修复windows启动mbr
今天使用Ghost装系统遇到windows7不能启动的问题,采用下面帖子中的部分命令搞定之. 我自己是直接使用: 插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键, ...
- C语言snprintf函数
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...); 函数说明:最多从源串中拷贝n-1个字符到 ...
- 探讨Web组件化的实现
CMS组件化,简单架构示意图: Web组件使用WebPage+WebAPI的好处: Ø 组件复用(组件条件管理页面复用+获取组件数据API复用). Ø 组件是分布式的第三方应用,本身高内聚.组件之 ...
- JavaScript实现拖拽预览,AJAX小文件上传
本地上传,提前预览(图片,视频) 1.html中div标签预览显示,button标签触发上传事件. <div id="drop_area" style="bord ...
- mysql2redis
mysql2redis这个项目主要解决mysql数据跟redis数据同步的问题 目前在测试环境研究这方面的应用,以下是git上面的介绍 git入口 git安装入口 Dependencies pl ...
- freemaker的基本语法
先来解释一下freemaker的基本语法了,<# ... > 中存放所有freemaker的内容,之外的内容全部原样输出.<@ ... /> 是函数调用两个定界符内的内容中,第 ...
- MFC ListControl使用方法
在原来博客中有:MF CListControl 简单功能使用 推荐文章:MFC类CtrlList用法 今天又又一次来介绍点新东西:双击击listcontrol 做出响应.当然你能够做的还有非常多,比 ...