Oracle中merge into的使用方法
一、用途:
可以同时从1个或者多个源表对目标表进行更新、插入、删除数据,经常用于操作大量的数据,即对于大批量的数据更新、插入时效率极高。
二、语法:
merge into table_name alias1 --目标表 可以用别名
using (table|view|sub_query) alias2 --数据源表 可以是表、视图、子查询
on (join condition) --关联条件
when matched then --当关联条件成立时 更新,删除,插入的where部分为可选 --更新update table_name set col1=colvalue where……--删除 delete from table_name where col2=colvalue where……
--可以只更新不删除 也可以只删除不更新。
--如果更新和删除同时存在,删除的条件一定要在更新的条件内,否则数据不能删除。
when not matched then --当关联条件不成立时 --插入insert (col3) values (col3values) where…… when not matched by source then --当源表不存在,目标表存在的数据删除delete;
三、语句讲解:
1、on后面的关联条件成立时,可以update、delete。
2、on后面的关联条件不成立时,可以insert。
3、当源表中不存在数据,而目标表中存在的数据可以删除。
四、注意事项:
1、只会操作“操作表”,源表不会有任何变化。
2、不一定要把update,delete,insert 操作都写全,可以根据实际情况。
3、merge into效率很高,强烈建议使用,尤其是在一次性提交事务中,可以先建一个临时表,更新完后,清空数据,这样update锁表的几率很小了。
4、Merge语句还有一个强大的功能是通过OUTPUT子句,可以将刚刚做过变动的数据进行输出。我们在上面的Merge语句后加入OUTPUT子句。
5、可以使用TOP关键字限制目标表被操作的行,如图8所示。在图2的语句基础上加上了TOP关键字,我们看到只有两行被更新。
五、举例说明:
1、首先看两张表test_emp(表结构和emp相同,只是其中个别数据不一样。),emp。
test_emp表:
emp表:
merge into 语句:
merge into test_emp a --需要操作的表 可以用别名
using emp b
on (a.EMPNO = b.EMPNO)
when matched then --当关联条件成立时 更新,删除,插入的where部分为可选 update set a.sal= b.sal where a.empno = '7566' or a.empno = '7654'delete where (empno = '7654')
when not matched then insert (a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno) values (b.empno, b.ename, b.job, b.mgr, b.hiredate, b.sal, b.comm, b.deptno);
如果delete后面的where条件不能满足前面update的where条件,不能删除数据。
merge into test_emp a --需要操作的表 可以用别名
using emp b
on (a.EMPNO = b.EMPNO)
when matched then --当关联条件成立时 更新,删除,插入的where部分为可选 update set a.sal= b.sal where a.empno = '7566' --or a.empno = '7654' 注释掉这个就不能删除数据了delete where (empno = '7654')
when not matched then insert (a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno) values (b.empno, b.ename, b.job, b.mgr, b.hiredate, b.sal, b.comm, b.deptno);
empno = ‘7654’,已经删除了,刚开始没有删除是因为:然而并没有删除 empno = ‘7654’的记录缘由是该条记录不满足update语句后面的where条件。
最终的结果test_emp如图:
Oracle中merge into的使用方法相关推荐
- Oracle的join默认为,Oracle中的三种Join方法详解
这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...
- oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念
Nested loop join:
Outer - phpStudy...
浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...
- Oracle中merge into的使用
http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...
- oracle中判断空,Oracle中判断空游标的方法
1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...
- oracle中nowait怎么用,oracle中UPDATE nowait 的使用方法介绍
oracle中UPDATE nowait 的使用方法介绍 1.UPDATE nowait 应用以下场景:查询某条数据,并对其开启数据库事务.如果查询的当前数据没有加锁,则正确返回结果,并对当前数据加锁 ...
- oracle中spool命令的使用,Oracle中Spool命令的使用方法实例
Oracle中Spool命令的使用方法实例 前言 对于Oracle中的Spool命令,其实还可以换一种问法为,如何将sqlplus中的结果输出到指定的文件夹中. 近期在进行Oracle数据库备份的时候 ...
- Oracle 中启动 Scott 用户 的方法
Oracle 中启动 Scott 用户 的方法 , 在 Oracle10g, (g 代表'网络'的意思) 数据库中 Scott 这个用户 安装时是被锁定的,安装 Oracle的时候 ,你可以直接选择 ...
- Oracle中raise触发异常,Oracle中RAISE异常的解决方法
今天小编给大家分享一篇中RAISE异常的解决方法,感兴趣的朋友跟小编一起来了解一下吧! 有三种方式抛出异常 1.通过PL/SQL运行时引擎 2.使用RAISE语句 3.调用RAISE_APPLICAT ...
- oracle中merge的用法,以及各版本的区别 Create checkbox全选JS(转载)
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...
最新文章
- robot framework环境搭建(转)
- pandas如何获取某一个元素的行号,也就是索引值
- three.js 一个页面可以存在多个render吗_你确定把Spring MVC的视图机制吃透了吗?...
- openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块[ZT]
- 计算机操作系统在线作业,【在线】电子科大17春《计算机操作系统》在线作业1...
- SharePoint 2013 - Sideloading
- 数模笔记_多变量最优化计算之随机搜索算法及建模案例
- less中的for循环
- 一些有意思的算法代码[转载]
- 《Oracle comment on注释信息方法论》
- 惯性制导精度是多少_美军激光炸弹真实精度性能:炸小卡车,直接从驾驶员车窗钻进去炸...
- Altium Designer实现原理图到PCB板的转换
- layui+strust2多文件上传
- direct3D 状态设置
- 51单片机c语言两个变量比对,51单片机C语言编程技巧
- 计算混响时间的意义_混响是什么意思,混响时间计算公式汇总,混响器的
- JAVA循环嵌套 方法的定义与重载 数组 数组异常 练习
- 下载链接在微信中无法打开的解决方案
- root 红米note5_怎么开启红米Note 5的ROOT权限
- HTML自动回答,自动回复.html
热门文章
- Python:for循环,列表操作制作员工管理系统EMS
- 武警二路擒敌拳16式
- 虫师JAVA接口自动化pdf下载,2019虫师自动化 Python接口自动化虫师 robotframework虫师 虫师接口自动化源码下载...
- outlook 2016 邮件怎么显示图片
- 运用python编写凯撒密码并实现_凯撒密码实现英文短句的加解密
- 《惊天魔盗团》—电影随评
- 连线游戏Game of Lines
- 关于C语言中表达式运算顺序(优先级、结合性、副作用、序列点)的讨论以及c语言未定义行为
- java date time_java8-date和timeAPI
- xilinx基础篇Ⅱ(9)Prj5 ILA的使用