merge into:
在两个表之间,根据与源表联接的结果,对目标表执行插入、更新或删除操作。
Oracle在9i引入了merge into命令,SQL Server 2008也引入merge into。

不多说了,实例对比一下吧!

oracle merge into:

  1. /*
  2. drop table a;
  3. drop table b;
  4. */
  5. create table a (aid integer null,aname varchar2(10) null);
  6. create table b (bid integer null,bname varchar2(10) null);
  7. insert into a values(1,'aname1');
  8. insert into a values(3,'aname3');
  9. insert into a values(4,'aname4');
  10. insert into b values(1,'bname1');
  11. insert into b values(2,'bname2');
  12. insert into b values(3,'bname3');
  13. merge into a
  14. using b
  15. on (a.aid=b.bid)--必须加括号
  16. when matched then
  17. update set a.aname=b.bname where b.bid>1 --可加条件
  18. when not matched then
  19. insert values(b.bid,b.bname)
  20. select * from a;
  21. select * from b;

查看A表结果:


1. 条件id>1 不更新

2. 符合条件,更新目标表

3. 注意:目标表中,此行 aid<>bid,保留了下来

4. 目标表中不存在id=2的,插入到目标表

sqlserver2008  merge into:

  1. /*
  2. drop table a;
  3. drop table b;
  4. */
  5. create table a (aid int null,aname varchar(10) null);
  6. create table b (bid int null,bname varchar(10) null);
  7. insert into a values(1,'aname1');
  8. insert into a values(3,'aname3');
  9. insert into a values(4,'aname4');
  10. insert into b values(1,'bname1');
  11. insert into b values(2,'bname2');
  12. insert into b values(3,'bname3');
  13. merge into a
  14. using b
  15. on a.aid=b.bid --可不用括号
  16. when matched then
  17. update set a.aname=b.bname
  18. when not matched then
  19. insert values(b.bid,b.bname)
  20. when not matched by source then --在a表中无操作的记录可执行删除
  21. delete; --必须以分号结束
  22. select * from a;
  23. select * from b;

查看A表结果:


看,匹配的完全更新到A表!

oracle merge into 和 sqlserver 2008 merge into 的区别:

1. oracle在连接条件 on(a.aid=b.bid) 必须加括号,sqlserver 可以不用,也可以用。

2. oracle中目标表不参与的记录行只能保留,sqlserver 还可以执行删除。

3. oracle 在匹配条件中可以进一步添加更新的筛选条件,sqlserver不能增加条件约束。

4. oracle在语句结尾可加或不加分号,sqlserver 必定要在语句结束后添加分号“;”。

引用自:http://blog.csdn.net/kk185800961/article/details/8760634

oracle merge into与sqlserver merge into 比较的更多相关文章

  1. sqlServer MERGE 对数据进行修改或插入自动视别 特别用于批量数据的插入或修改

    sqlServer MERGE   对数据进行修改或插入自动视别 特别用于批量数据的插入或修改    MERGE  customer AS targetTable   --目标表    USING ( ...

  2. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  3. 《物联网框架ServerSuperIO教程》-19.设备驱动和OPC Client支持mysql、oracle、sqlite、sqlserver的持久化。v3.6.4版本发布

    19.设备驱动和OPC Client支持mysql.oracle.sqlite.sqlserver的持久化 19.1     概述 ServerSuperIO支持设备驱动和OPC Client采集的数 ...

  4. oracle直接读写ms sqlserver数据库(一)如何下载oracle database gateway for sqlserver

    想从Oracle实时同步数据到Ms Sqlserver,需要在Oracle里面直连Sqlserver进行数据的读写,可以在Oracle服务器上安装oracle database gateway for ...

  5. Oracle 11g透明网关连接Sqlserver

    Oracle 11g透明网关连接Sqlserver oracle 透明网关是oracle连接异构数据库提供的一种技术.通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Se ...

  6. Oracle 11g透明网关连接Sqlserver 2000(转)

    Oracle 11g透明网关连接Sqlserver 2000: http://www.cnblogs.com/lightnear/archive/2013/02/03/2890858.html 透明网 ...

  7. Leetcode 23.Merge Two Sorted Lists Merge K Sorted Lists

    Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list shoul ...

  8. 通过Oracle sql developer从sqlserver迁移数据到oracle

    通过Oracle sql developer工具从sqlserver迁移数据到oracle 序言 一般情况下,sqlserver数据迁移到oracle,我们可以使用ODI来进行.但ODI的安装.配置. ...

  9. Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间

    做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...

随机推荐

  1. 85D Sum of Medians

    传送门 题目 In one well-known algorithm of finding the k-th order statistics we should divide all element ...

  2. Luogu 3934 Nephren Ruq Insania

    和Ynoi2016 炸脖龙重题了. BZOJ 5394. 首先是扩展欧拉定理: 一开始傻掉了……递归的层数和区间长度无关……也就是说我们每一次直接暴力递归求解子问题一定不会超过$logP$层,因为当模 ...

  3. 冒泡排序的PHP实现

    定义: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 排序思想:(从后往前) 比较相邻的 ...

  4. tftp命令详解

    TFTP协议简介TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面: 一是linux服务器端的tftp-server支持,二是嵌入式目标 ...

  5. Java50道经典习题-程序27 求素数

    题目:求100之内的素数分析:素数即除了1和它本身以外不再有其他因数,最小的素数是2 判断一个数n是否是素数的方法:将n分别与2到(n+1)/2取余,若有一个值为0,则n就不为素数,反之为素数 pub ...

  6. ubuntu - 官方简体中文wiki,有你想要的ubuntu的一切

    ubuntu官方简体中文wiki:http://wiki.ubuntu.org.cn/%E9%A6%96%E9%A1%B5

  7. hdu4651(广义五边形数 & 分割函数1)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4651 题意:f(x) 为将 x 分成其他数和的形式的方案数.对于 t 组输入,输出 f(xi). 思路 ...

  8. New Distinct Substrings(后缀数组)

    New Distinct Substrings(后缀数组) 给定一个字符串,求不相同的子串的个数.\(n<=50005\). 显然,任何一个子串一定是后缀上的前缀.先(按套路)把后缀排好序,对于 ...

  9. An error has occurred. See error log for more details. java.lang.NullPointerException

    今天重新新建一个eclipse的空间,就报了这么一个错误,百度找了很多,发现不对头,都不行.后来点开错误一看,原来是web.xml里面没有文件头造成的. 解决办法:只需要在web.xml文件里添加文件 ...

  10. [ZJOI2009]函数 BZOJ1432

    题目描述 有n 个连续函数fi (x),其中1 ≤ i ≤ n.对于任何两个函数fi (x) 和fj (x),(i != j),恰好存在一个x 使得fi (x) = fj (x),并且存在无穷多的x ...