当前位置: 首页 > news >正文

02_oracle中merge into用法解析

–oracle中merge into用法解析
–oracle在9i引入了merge,在oracle10g中merge有如下改进
–1.update或insert子句是可选的
–2.update和insert子句是可选的
–3.在on条件中使用常量过滤谓词来insert所有行到目标表中,不需要连接源表和目标表。
–4.update子句后面可以跟delete子句来除一些不需要的行
merge into 的形式
merge into [target-table] a using [source-table sql] b on([conditional expression] and […]…)
when matched then
[update sql]
when not matched then
[insert sql]
作用:判断B表和A表是否满足ON中的条件,如果满足则用B去更新A表,
如果不满足,则将B表数据插入A表。但是有很多选项,如下:
1.正常模式
2.只update或者只insert
3.带条件的update或带条件的insert
4.全插入insert实现
5.带delete的update
–1.正常模式
–1.测试建以下表
create table a_merge(id number,name varchar2(12),year number);
create table b_merge(id number,aid number,name varchar2(12),year number,city varchar2(12));
create table c_merge(id number,name varchar2(12),city varchar2(12));
–2.预埋数据
truncate table a_merge;
insert into a_merge values(1,‘liuwei’,20);
insert into a_merge values(2,‘zhangbin’,21);
insert into a_merge values(3,‘fuguo’,20);

truncate table b_merge;
insert into b_merge values(1,2,‘zhangbin’,33,‘colorado’);
insert into b_merge values(2,4,‘yihe’,33,‘virgin’);
insert into b_merge values(3,3,‘fuguo’,55,‘maine’);
insert into b_merge values(11,11,‘ligd’,55,‘vermont’);
insert into b_merge values(12,22,‘test’,55,‘montana’);
commit;
–3.使用merge into 用b_merge来更新a_merge中的数据
Merge into a_merge a
using (select b.aid, b.name, b.year from b_merge b) c
on (a.id = c.aid)
when matched then
update set a.year = c.year
when not matched then
insert (a.id, a.name, a.year) values (c.aid, c.name, c.year);
commit;
–4.查询结果
select * from a_merge;
select * from b_merge;

–2.只update或者只insert模式
–2.1只update
Merge into a_merge a
using (select b.aid, b.name, b.year from b_merge b) c
on (a.id = c.aid)
when matched then
update set a.year = c.year;
commit;
–2.2只insert
Merge into a_merge a
using (select b.aid, b.name, b.year from b_merge b) c
on (a.id = c.aid)
when not matched then
insert (a.id, a.name, a.year) values (c.aid, c.name, c.year);
commit;

–3.带where条件的insert和update模式
Merge into a_merge a
using (select b.aid, b.name, b.year,b.city from b_merge b) c
on (a.id = c.aid)
when matched then
update set a.year = c.year where c.city=‘vermont’
when not matched then
insert (a.id, a.name, a.year) values (c.aid, c.name, c.year) where c.city=‘vermont’;
commit;

–4.无条件的insert
Merge into a_merge a
using (select b.aid, b.name, b.year,b.city from b_merge b) c
on (1=2)
when not matched then
insert (a.id, a.name, a.year) values (c.aid, c.name, c.year);
commit;
–4.带delete的update
Merge into a_merge a
using (select b.aid, b.name, b.year,b.city from b_merge b) c
on (1=1)
when matched then
update set a.year = c.year where c.city=‘vermont’
delete where a.id=1;
commit;

相关文章:

  • LocalCache
  • 03_oracle 10g表空间创建步骤
  • LDA-线性判别分析(三)
  • 04_oracle锁表解锁语句
  • 【转载】ASP.NET MVC的过滤器【Filters】
  • 05_oracle 查看表空间的大小及使用情况sql语句
  • 每日英语:Tech Firms Flock to Vietnam
  • 06_SPOOL导出_表头模式
  • jetty8的多实例部署(LT项目开发参考)
  • 07_oracle正则表达式语法
  • 测试比json更快更小的二进制数据传输格式Msgpack [pythono MessagePack 版本]
  • 01_excel基础知识1
  • 学习Trie树,处理“海量”数据
  • hibernate的native sql查询
  • 类的成员变量和属性Fields and Properties in class
  • [笔记] php常见简单功能及函数
  • 「译」Node.js Streams 基础
  • ES6 学习笔记(一)let,const和解构赋值
  • Gradle 5.0 正式版发布
  • HTML中设置input等文本框为不可操作
  • python 装饰器(一)
  • vue.js框架原理浅析
  • windows-nginx-https-本地配置
  • Xmanager 远程桌面 CentOS 7
  • 大型网站性能监测、分析与优化常见问题QA
  • 前端自动化解决方案
  • 巧用 TypeScript (一)
  • 使用 @font-face
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 突破自己的技术思维
  • 详解NodeJs流之一
  • 移动端解决方案学习记录
  • ​iOS实时查看App运行日志
  • ​卜东波研究员:高观点下的少儿计算思维
  • $.ajax,axios,fetch三种ajax请求的区别
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (9)目标检测_SSD的原理
  • (C++20) consteval立即函数
  • (分类)KNN算法- 参数调优
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)ObjectiveC 深浅拷贝学习
  • (转)为C# Windows服务添加安装程序
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***测试-HTTP方法
  • ***利用Ms05002溢出找“肉鸡
  • .gitignore文件_Git:.gitignore
  • .Net - 类的介绍
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net MySql
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net接口调试与案例
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件