zoukankan      html  css  js  c++  java
  • oracle merge into与sqlserver merge into 比较

    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.   
    6. create table a (aid integer null,aname varchar2(10) null);  
    7. create table b (bid integer null,bname varchar2(10) null);  
    8.   
    9. insert into a values(1,'aname1');  
    10. insert into a values(3,'aname3');  
    11. insert into a values(4,'aname4');  
    12.   
    13. insert into b values(1,'bname1');  
    14. insert into b values(2,'bname2');  
    15. insert into b values(3,'bname3');  
    16.   
    17. merge into a   
    18. using b   
    19. on (a.aid=b.bid)--必须加括号  
    20. when matched then   
    21.   update set a.aname=b.bname where b.bid>1 --可加条件  
    22. when not matched then   
    23.   insert values(b.bid,b.bname)  
    24.     
    25. select * from a;  
    26. 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.   
    8. insert into a values(1,'aname1');  
    9. insert into a values(3,'aname3');  
    10. insert into a values(4,'aname4');  
    11.   
    12. insert into b values(1,'bname1');  
    13. insert into b values(2,'bname2');  
    14. insert into b values(3,'bname3');  
    15.   
    16. merge into a  
    17. using b   
    18. on a.aid=b.bid --可不用括号  
    19. when matched then   
    20.   update set a.aname=b.bname  
    21. when not matched then   
    22.   insert values(b.bid,b.bname)  
    23. when not matched by source then --在a表中无操作的记录可执行删除  
    24.   delete--必须以分号结束  
    25.   
    26.   
    27. select * from a;  
    28. 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

  • 相关阅读:
    scikitlearn中predict_proba用法 (与predict的区别)
    Sklearn,TensorFlow,keras模型保存与读取
    TensorFlow GPU 的使用
    Keras2.2 predict和fit_generator的区别
    wordcloud词云可视化
    使用scp命令,远程上传下载文件/文件夹
    L0/L1/L2范数的联系与区别
    Python中的正斜杠/与反斜杠\
    在Keras中使用tensorboard可视化acc等曲线
    Linux终端没有GUI,使用matplotlib绘图
  • 原文地址:https://www.cnblogs.com/shisw/p/3513889.html
Copyright © 2011-2022 走看看