一、用途:

可以同时从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的使用方法相关推荐

  1. Oracle的join默认为,Oracle中的三种Join方法详解

    这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...

  2. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  3. Oracle中merge into的使用

    http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...

  4. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

  5. oracle中nowait怎么用,oracle中UPDATE nowait 的使用方法介绍

    oracle中UPDATE nowait 的使用方法介绍 1.UPDATE nowait 应用以下场景:查询某条数据,并对其开启数据库事务.如果查询的当前数据没有加锁,则正确返回结果,并对当前数据加锁 ...

  6. oracle中spool命令的使用,Oracle中Spool命令的使用方法实例

    Oracle中Spool命令的使用方法实例 前言 对于Oracle中的Spool命令,其实还可以换一种问法为,如何将sqlplus中的结果输出到指定的文件夹中. 近期在进行Oracle数据库备份的时候 ...

  7. Oracle 中启动 Scott 用户 的方法

    Oracle 中启动 Scott 用户 的方法 , 在 Oracle10g, (g 代表'网络'的意思) 数据库中  Scott 这个用户 安装时是被锁定的,安装 Oracle的时候 ,你可以直接选择 ...

  8. Oracle中raise触发异常,Oracle中RAISE异常的解决方法

    今天小编给大家分享一篇中RAISE异常的解决方法,感兴趣的朋友跟小编一起来了解一下吧! 有三种方式抛出异常 1.通过PL/SQL运行时引擎 2.使用RAISE语句 3.调用RAISE_APPLICAT ...

  9. oracle中merge的用法,以及各版本的区别 Create checkbox全选JS(转载)

    Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...

最新文章

  1. robot framework环境搭建(转)
  2. pandas如何获取某一个元素的行号,也就是索引值
  3. three.js 一个页面可以存在多个render吗_你确定把Spring MVC的视图机制吃透了吗?...
  4. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块[ZT]
  5. 计算机操作系统在线作业,【在线】电子科大17春《计算机操作系统》在线作业1...
  6. SharePoint 2013 - Sideloading
  7. 数模笔记_多变量最优化计算之随机搜索算法及建模案例
  8. less中的for循环
  9. 一些有意思的算法代码[转载]
  10. 《Oracle comment on注释信息方法论》
  11. 惯性制导精度是多少_美军激光炸弹真实精度性能:炸小卡车,直接从驾驶员车窗钻进去炸...
  12. Altium Designer实现原理图到PCB板的转换
  13. layui+strust2多文件上传
  14. direct3D 状态设置
  15. 51单片机c语言两个变量比对,51单片机C语言编程技巧
  16. 计算混响时间的意义_混响是什么意思,混响时间计算公式汇总,混响器的
  17. JAVA循环嵌套 方法的定义与重载 数组 数组异常 练习
  18. 下载链接在微信中无法打开的解决方案
  19. root 红米note5_怎么开启红米Note 5的ROOT权限
  20. HTML自动回答,自动回复.html

热门文章

  1. Python:for循环,列表操作制作员工管理系统EMS
  2. 武警二路擒敌拳16式
  3. 虫师JAVA接口自动化pdf下载,2019虫师自动化 Python接口自动化虫师 robotframework虫师 虫师接口自动化源码下载...
  4. outlook 2016 邮件怎么显示图片
  5. 运用python编写凯撒密码并实现_凯撒密码实现英文短句的加解密
  6. 《惊天魔盗团》—电影随评
  7. 连线游戏Game of Lines
  8. 关于C语言中表达式运算顺序(优先级、结合性、副作用、序列点)的讨论以及c语言未定义行为
  9. java date time_java8-date和timeAPI
  10. xilinx基础篇Ⅱ(9)Prj5 ILA的使用