oracle中 merge into 的用法
很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作。这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge into 的用法会极大的优化我们操作表的时间和代码量。
举例,先新建2个表:
create table book(
id number,
name varchar(64),
price number,
primary key(id)
)
create table pbook as select * from book
delete pbook
这里create table A as (select....) 不熟悉的人可以记一下,以后可以常用,相当于备份一个表,既有表结构也有数据。分别插入不同的数据,如下


现在我们对表book (下面称a表)进行操作, 需要同时更新a表价格为0的数据,插入 a表没有的数据,且通过条件过滤掉b表的价格大于1000的数据的极大数据。
merge into book a
using pbook b
on (a.id=b.id)
when matched then
update set a.price=b.price*0.8
where a.price=0
delete where (b.price>1000)
when not matched then
insert (a.id,a.name,a.price)
values (b.id,b.name,b.price);
说明:when matched then 是判断条件,即如果a表中 a.price没有等于0的就不会去执行更新语句了,后面的delete where 也是在更新中过滤某些数据。没有则可以不加
a表结果如下:

该语句做到了:1、删除id=1的数据,2、更新了2,3的数据。3、插入了4,5两条新数据。4、id为4的数据不变
merge into是dml语句,需要进行rollback和commit 结束事物
发现:经测试插入数据顺序为无序(没有规律,如有人发现规律请指教)。
oracle中 merge into 的用法的更多相关文章
- Oracle中Merge into的用法实例讲解
		
最近在做一个需求,就是涉及到表的问题,前端传过来一条数据,根据主键,查询数据库,如果不存在,那么久插入到数据库中一条,如果存在的话,就是以主键的方式,对数据库中的数据,进行更新. 拿到这个需求的时候, ...
 - Oracle 中MERGE语句的用法
		
原文章出处(http://blog.csdn.net/lichkui/article/details/4306299) MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语 ...
 - Oracle中merge into的使用
		
http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...
 - Oracle中merge into的使用 (转)
		
该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动. 1.ins ...
 - Oracle中merge into的使用 (转)
		
http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...
 - Oracle中rownum的基本用法
		
Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...
 - Oracle 中 CONTAINS 函数的用法
		
Oracle 中 CONTAINS 函数的用法 1. 查询住址在北京的学生 SELECT student_id,student_name FROM students WHERE CONTAINS( a ...
 - oracle中merge的用法,以及各版本的区别 Create
		
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个 ...
 - Oracle中Merge into用法总结
		
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执 ...
 
随机推荐
- python函数前篇
			
函数:函数是指将一组语句的集合通过一个函数名封装起来,要想执行这个函数,只需调用其函数名即可 函数特性: 减少重复代码 使程序变得可扩展 使程序变得易维护 什么是函数? 函数就是具备某一特定功能的工具 ...
 - A - Wrestling Match HDU - 5971
			
Nowadays, at least one wrestling match is held every year in our country. There are a lot of people ...
 - cookie在不同域名domain、path下的读取规则
			
cookie 子域名可以读父域名中的cookie 如在 .ping.com域下注入cookie,则该子域下的网页如p1.ping.com.p2.ping.com 都能读取到cookie信息 path的 ...
 - Python datetime之timedelta
			
该函数表示两个时间的间隔 参数可选.默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minut ...
 - 常用的Python代码段
			
过滤列表 #filter out empty strings in a sting list list = [x for x in list if x.strip()!=''] 一行一行地读文件 wi ...
 - 使用springboot完成密码的加密解密
			
现今对于大多数公司来说,信息安全工作尤为重要,就像京东,阿里巴巴这样的大公司来说,信息安全是最为重要的一个话题,举个简单的例子: 就像这样的密码公开化,很容易造成一定的信息的泄露.所以今天我们要讲的就 ...
 - C#实现倒油算法
			
原题如下:12(a桶 满的 有12斤油)斤桶里 取出6斤油 有 另外有8斤(b桶)和5斤(c桶)两个空桶 让程序输出取出这6斤油的步骤 现在实现的算法可以配参数(定义有几个桶,初始有多少油,要得到多 ...
 - Ext3和Ext4文件系统区别
			
inode http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html Ex3使用15个inode查询数据块,前12个为直接数据块,直接指 ...
 - LoadRunner系统资源监视
			
http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2013/0418/206165_3.html --------- ...
 - 调试利器:SSH隧道
			
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文作者:ivweb 吴浩麟 原文出处:IVWEB社区 未经同意,禁止转载 在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需 ...