• ORACLE中的MERGE语法使用记录


    项目中使用到了Oracle的MERGE INTO语句,在这里简单记录下使用方法

    使用场景如下:

    存在对一张数据量很大的表,你需要对里面的大量数据进行更新,如果数据不存在,就进行插入的操作。

    常规想到的办法是先根据条件查询一番,如 果存在,那么就更新,否则就插入?

    起始在Oracle9i 后可以用merge into轻轻松松搞定这个问题,避免多次的查询判断以及更新插入操作,而且效率更高

    1.merge into简介

    用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行SQL(例如UPDATE),无法匹配的执行SQL(例如INSERT)。

    这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE

    2.merge into语法

    MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)

    WHEN MATCHED THEN

    [UPDATE sql]

    WHENNOT MATCHED THEN

    [INSERT sql]

    ;--不要忘记分号

    作用:判断B表和A表是否满足ON中条件,如果满足则执行对应sql语句,如果不满足,则执行对应sql语句

    另外有说明如下:

    1. Merge操作的只是“操作表”,源表不会有任何变化
    2. Merge的最后结尾必须是以分号结束的,不能忘了分号
    3. 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格
    4. 不一定要把两个操作都写全,可以根据实际情况

    3.merge into基础示例

    ---创建源表
    Create Table OriginTable(id Int,caption VarChar(50));
    ---创建操作表
    Create Table TargetTable(id Int,caption VarChar(50));
    --插入测试数据
    Insert Into OriginTable(id,caption)VALUES(1,'测试1');
    Insert Into OriginTable(id,caption)VALUES(2,'测试2');
    Insert Into OriginTable(id,caption)VALUES(3,'测试3');
    Insert Into OriginTable(id,caption)VALUES(4,'测试4');
    Insert Into TargetTable(id,caption)VALUES(1,'目标表匹配到了源表则update1');
    Insert Into TargetTable(id,caption)VALUES(2,'目标表匹配到了源表则update2');
    Select * from OriginTable;
    Select * from TargetTable;
    MERGE INTO TargetTable USING OriginTable ON (TargetTable.id=OriginTable.id)
    WHEN MATCHED --当上面on后的TargetTable.id=OriginTable.id时,则更新,也可以加上自定义的限制条件 MATCHED AND S.id=2
    Then UpDate set TargetTable.caption=OriginTable.caption
    When Not Matched --目标中没有的id ,在源表中有则插入
    Then Insert Values(OriginTable.id, OriginTable.caption)
    ;--Merge的最后结尾必须是以分号结束的,不能忘了分号 谨记:语法严格要求关键字之间只能有一个英文空格,不能有多余的空格

     

  • 相关阅读:
    java 算法最长连续递增子序列
    java 算法最长连续递增序列
    最大连续子数组和(Java)
    mysql时间序列与窗口函数
    CSS控制br高度
    小知识随手记(九):兄弟选择器(~和+)区别
    VUE组件递归实现自定义目录及拖拽效果
    VUE的插件解析
    VUE的mixin混入解析
    VUE高阶组件解析
  • 原文地址:https://www.cnblogs.com/widget90/p/9031790.html
Copyright © 2020-2023  润新知