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. C#多线程的简单例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. jquery ajax 分页

    <script src="../Js/jQuery/jquery-1.8.2.min.js" type="text/javascript">< ...

  3. HTML5游戏开发 PDF扫描版​

    很多从事Web前端开发的人对HTML总有些不满,比如需要手动检查和设计很多格式代码,不仅容易出错,而且存在大量重复.好在HTML5让我们看到了曙光.作为下一代Web开发标准,HTML5成为主流的日子已 ...

  4. javascript 设计模式实践之策略模式--输入验证

    博客地址:http://www.cnblogs.com/kongxianghai/p/4985122.html,写的挺好的推荐下!

  5. 【bzoj1030】: [JSOI2007]文本生成器 字符串-AC自动机-DP

    [bzoj1030]: [JSOI2007]文本生成器 首先把匹配任意一个的个数的问题转化为总个数-没有一个匹配的个数 先构造AC自动机,然后枚举每一位的字母以及在自动机上的位置 f[i][j]为第i ...

  6. linux下redis的安装与django-redis使用方法

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  7. Jmeter-逻辑控制器之Foreach

    ForEach 作用:用来遍历当前元素的所有可执行场景:在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值: 输入变量前缀:在其中输入需要遍历 ...

  8. Oracle数据稠化

                姓名                      学科                分数             城市                张三           ...

  9. luogu4449 于神之怒加强版(莫比乌斯反演)

    link 给定n,m,k,计算\(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k\)对1000000007取模的结果 多组数据,T<=2000,1<=N,M,K&l ...

  10. 在SQLSERVER中创建聚集索引

    CREATE CLUSTERED INDEX CLUSTER_id ON TABLE_name(ID)------批量