最近项目上使用Oracle的Merge,所以找来一下资料学习了解。

该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。

特点:

1、insert 和update是可选的 ;

2、UPDATE 和INSERT 后面可以跟WHERE 子句 ;

3、在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表 ;

4、UPDATE 子句后面可以跟delete 来去除一些不需要的行。

create table PRODUCTS

(

PRODUCT_ID INTEGER,

PRODUCT_NAME VARCHAR2(60),

CATEGORY VARCHAR2(60)

);

insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');

insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');

insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');

insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');

insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');

commit;

create table NEWPRODUCTS

(

PRODUCT_ID INTEGER,

PRODUCT_NAME VARCHAR2(60),

CATEGORY VARCHAR2(60)

);

insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');

insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');

insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');

insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');

commit;

1,可省略的update 或者insert

MERGE INTO products p

2 USING newproducts np

3 ON (p.product_id = np.product_id)

4 WHEN MATCHED THEN

5 UPDATE

6 SET p.product_name = np.product_name,

7 p.category = np.category;

使用表newproducts中的product_name 和category字段来更新表products 中相同product_id的product_name 和category.

2,当条件不满足的时候把newproducts表中的数据INSERT 到表products中。

MERGE INTO products p

USING newproducts np

ON (p.product_id = np.product_id)

WHEN NOT MATCHED THEN

INSERT

VALUES (np.product_id, np.product_name,

np.category);

3,带条件的insert 和update

MERGE INTO products p

USING newproducts np

ON (p.product_id = np.product_id)

WHEN MATCHED THEN

UPDATE

SET p.product_name = np.product_name

WHERE p.category = np.category;

insert 和update 都带有where 字句

MERGE INTO products p

USING newproducts np

ON (p.product_id = np.product_id)

WHEN MATCHED THEN

UPDATE

SET p.product_name = np.product_name,

p.category = np.category

WHERE p.category = 'DVD'

WHEN NOT MATCHED THEN

INSERT

VALUES (np.product_id, np.product_name, np.category)

WHERE np.category != 'BOOKS'

4,无条件的insert

MERGE INTO products p

USING newproducts np

ON (1=0)

WHEN NOT MATCHED THEN

INSERT

VALUES (np.product_id, np.product_name, np.category)

WHERE np.category = 'BOOKS'

5,delete 子句

1  merge into products p

2  using newproducts np

3  on(p.product_id = np.product_id)

4  when matched then

5  update

6  set p.product_name = np.product_name

7  delete where category = 'macle1_cate';

select *

from products;

PRODUCT_ID PRODUCT_NAME         CATEGORY

--------------------------------------- -------------------- --------------------

1502 macle22              macle2_cate

1503 macle3                macle2_cate

1504 macle                  macle1_cate

1505 macle5                macle5_cate

1504 中的macle1_cate 满足delete where,但是不满足 on 中的条件,所以没有被删除。!!!!!!

在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。

MERGE INTO table_name alias1

USING (table|view|sub_query) alias2

ON (join condition)

WHEN MATCHED THEN

UPDATE table_name

SET col1 = col_val1,

col2     = col2_val

WHEN NOT MATCHED THEN

INSERT (column_list) VALUES (column_values);

用中文来解释Merge语法,就是:

在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。

java merge into_Oracle merge into的使用相关推荐

  1. git merge的三种操作merge, squash merge, 和rebase merge

    原链接:https://www.jianshu.com/p/ff1877c5864e git merge的三种操作merge, squash merge, 和rebase merge 举例来说: 假设 ...

  2. git merge\git merge --no-commit\git merge --squash区别

    假设现有分支develop.test.需要将test合并到develop分支. 首先git checkout develop. git merge test test分支会合并到develop,会有t ...

  3. Java实现归并排序 Merge Sort

    本文带来八大排序算法之归并排序算法. 归并排序是利用归并思想实现的排序算法,该算法采用经典的分治DAC(divide - and - conquer)策略.分治法将问题分(divide)成一些小的问题 ...

  4. Java List 的merge

    List的merge的基本思路与数组是相同的,但是在具体实现的时候还是有一些困难的.由于List的Iterator没有Prev函数.本文采用简单测量规避了这个问题. 有兴趣的同学参照一下下面的示例. ...

  5. java sql merge_sql merge用法

    用途 merge 命令可以用来用一个表中的数据来修改或者插入到另一个表.插入或者修改的操作取决于on子句的条件. 该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句. ...

  6. oracle数据库merge into,merge into 的用法

    以前看到过merge into 不过都没怎么留意过,今天看到了,赶紧记录下: SQL> select version from product_component_version; VERSIO ...

  7. git Untracked Files Prevent Merge (merge)拉取代码失败

    git 拉取代码时报错,Untracked Files Prevent Merge 报错信息的意思是: 未跟踪的文件阻止合并, 合并前移动或者提交他们. 其实就是本地有未提交的文件和git上的文件重名 ...

  8. H.266/VVC帧间预测技术学习:带有运动矢量差的Merge技术(Merge mode with MVD)

    在VVC的扩展Merge模式当中,当前CU生成的Merge list中选择一个率失真代价值最小的候选项直接作为自己的运动信息.除了常规Merge模式,VVC还引入了带运动矢量差(Merge mode ...

  9. Java 8 中 Map 骚操作之 merge() 的用法

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | juejin.im/post/5d9b455a ...

最新文章

  1. 导入语句 python_Python导入语句说明
  2. Markdown拾遗
  3. iOS项目开发过程中的目录结构(转)
  4. Servicehot:混合云泄露四大公有云的秘密
  5. Volatile可见性底层实现原理
  6. 子数整数(luogu 1151)
  7. 人工智能AI实战100讲(五)-基于强化学习的自动化剪枝模型
  8. Centos 6.5部署nginx+uwsgi+django
  9. 【报告分享】2020金融兴趣人群内容消费及理财意识洞察报告.pdf(附下载链接)...
  10. 聊聊flink的BlobServer
  11. DataNode 运行状况
  12. jQuery应用之eraser.js使用,实现擦除、刮刮卡效果
  13. 5、【办公自动化】Python实现PDF转Word
  14. 转专业申请麦吉尔大学计算机,加拿大大学转专业申请秘籍
  15. 爬虫入门实战(如何分析页面和构建requests请求)
  16. 安卓AsyncTask
  17. 成功的道路上,人脉比知识更重要。(SEO核心)
  18. 黑猴子的家:JavaWeb 之 Title icon
  19. 图像分割二十年,盘点影响力最大的10篇论文(含论文和源代码)
  20. 一键装机linux_教你如何使用u盘安装Linux系统

热门文章

  1. php ajax 表格编辑,php ajax表格实时编辑 PHP Ajax实现表格实时编辑
  2. 【BCH码1】系统BCH码编码原理及MATLAB实现(不使用MATLAB库函数)
  3. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真
  4. 循环自相关函数和谱相关密度(五)——实信号、复信号模型下的QPSK信号循环谱MATLAB仿真结果及代码
  5. 倍福嵌入式控制器PLC各型号简介
  6. MySQL常见问题的解决,root用户密码忘记,不是内部或外部命令,修改数据库和表的字符编码,命令行客户端的字符集问题
  7. java中线性结构的例子_java数据结构--线性结构
  8. MADDPG中环境怎么配置,multiagent包解决
  9. ListView常用属性、方法
  10. 分段概率密度矩估计_考研数学:高数、线代、概率3科目知识框架梳理