大家好,关于Oracle数据库Merge Into语句全面解析很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
1)、合并到模式中。表别名
使用{模式。表|意见|查询} 别名ON {(条件) }
当匹配时更新设置{clause}
当不匹配时插入值{clause};
2),--分析
INTO子句------用于指定更新或插入的目标表。
USING子句--------用于指定要更新或插入的记录的来源。它可以是表、视图或子查询。
ON ----- 用于目的表和源表(视图、子查询)之间的关联,如果匹配(或存在),则更新,否则插入。
更新集------用来编写更新语句
insert ----- 用于插入目标表中没有的数据
2、merge语句的各种使用练习
1)、创建表aa
创建表t_B_info_aa
(id varchar2(20),
名称varchar2(50),
类型varchar2(30),
价格编号
);
2)向表a中插入记录
插入t_B_info_aa 值("01","冰箱","家电",2000);
插入t_B_info_aa 值("02","洗衣机","家用电器",1500);
插入t_B_info_aavalues("03","热水器","家电",1000);
insert into t_B_info_aa values("04","净水器","家电",1450);
插入t_B_info_aa值("05","燃气灶","家电",800);
insert into t_B_info_aa values("06","太阳能","家电",1200);
插入t_B_info_aa 值("07","番茄","食物",1.5);
插入t_B_info_aa 值("08","黄瓜","食物",3);
插入t_B_info_aa 值("09","菠菜","食物",4);
插入t_B_info_aa 值("10","香菇","食物",9);
插入t_B_info_aa 值("11","韭菜","食物",2);
插入t_B_info_aa 值("12","卷心菜","食物",1.2);
插入t_B_info_aa 值("13","celery","food",2.1);
3)、创建表b
创建表t_B_info_bb
(id varchar2(20),
类型varchar2(50),
价格编号
4)、向bb)插入数据;
插入t_B_info_bb值("01","家电",2000);
插入t_B_info_bb values("02","家电",1000);
5)、update和insert同时使用
合并到t_B_info_bb b
using t_B_info_aa a -- 如果是子查询,必须用括号括起来
on (a.id=b.id and a.type=b.type) --关联条件要用括号括起来
当匹配时
update set b.price=a.price --update 后面直接跟set 语句
当不匹配时
insert(id,type,price)values(a.id,a.type,a.price)--insert后面不跟to
---该语句根据t_B_info_aa更新t_B_info_bb中的一条记录,插入11条记录
6)、只插入不更新
--对表中的数据进行处理,改变表中的一条数据,删除部分数据。用于验证只插入不更新的功能
更新t_B_info_bb b 设置b.price=1000 其中b.id="02";
从t_B_info_bb b 中删除,其中b.type="food";
--去掉whenmatchedthenupdate语句即可
合并到t_B_info_bb b
使用t_B_info_aa
上(a.id=b.id 且a.type=b.type)
当不匹配时
插入(id,类型,价格)值(a.id,a.type,a.price)
7)、只更新不插入
--处理表中的数据,删除部分数据,验证只是更新,没有插入。
从t_B_info_bb b 中删除,其中b.type="food";
--只更新不插入,只是去掉when not match then insert语句
合并到t_B_info_bb b
使用t_B_info_aa
上(a.id=b.id 且a.type=b.type)
当匹配时
更新集合b.price=a.price
3、添加限制操作
更新t_B_info_bb
设置b.价格=1000
其中b.id="02"
从t_b_info_bb b 中删除,其中b.id 不在("01","02") 且b.type="Home Appliances"
更新t_B_info_bb
设置b.价格=8
其中b.id="10"
从t_b_info_bb b 中删除,其中b.id in ("11","12","13") 和b.type="food"
表中的数据
执行merge语句:脚本一和脚本二执行结果相同
脚本1:合并到t_B_info_bb b
使用t_B_info_aa
上(a.id=b.id 且a.type=b.type)
当匹配时
更新设置b.price=a.price 其中a.type="Home Appliances"
当不匹配时
插入
(ID、类型、价格)
价值观
(a.id, a.type, a.price) 其中a.type="家用电器";
脚本2:合并到t_B_info_bb b
使用(选择a.id,a.type,a.price
来自t_B_info_aa
其中a.type="家用电器") a
上(a.id=b.id 且a.type=b.type)
当匹配时
更新集合b.price=a.price
当不匹配时
插入(id,类型,价格)值(a.id,a.type,a.price);
结果:
以上两条语句仅插入和更新类型为家电的语句。
第三个脚本仅更新家用电器并插入所有其余的。
合并到t_B_info_bb b
使用t_B_info_aa
上(a.id=b.id 且a.type=b.type)
当匹配时
更新集合b.price=a.price
其中a.type="家用电器"
当不匹配时
插入
(ID、类型、价格)
价值观
(a.id、a.type、a.price);
4.添加、删除操作
update 子句后面可以跟一个delete 子句来删除一些不必要的行。
delete只能与update结合使用,删除满足where子句的记录。
例子:
合并到t_B_info_bb b
使用t_B_info_aa
上(a.id=b.id 且a.type=b.type)
当匹配时
更新集合b.price=a.price
删除where (a.type="food")
好了,关于Oracle数据库Merge Into语句全面解析和的问题到这里结束啦,希望可以解决您的问题哈!
【Oracle数据库Merge Into语句全面解析】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我一直觉得MERGE INTO 语句真的太有用啦!它能一次性合并数据,省时省力。
有13位网友表示赞同!
最近在学习 10g 的 Oracle 数据库,这个 MERGE INTO 语句让我眼前一亮!
有9位网友表示赞同!
文章讲解的非常详细,终于搞明白 MERGE INTO 语句是怎么运作的了!
有14位网友表示赞同!
想做数据维护操作的时候,肯定会用到 MERGE INTO 语句,现在明白了它的用法,太棒了!
有20位网友表示赞同!
以前我一直使用 INSERT 和 UPDATE 分别处理合并数据的情况,现在才知道这个语句可以一次搞定。
有17位网友表示赞同!
Oracle 数据库中确实存在很多强大功能,MERGE INTO 就 exemplifies 这种力量!
有10位网友表示赞同!
看了文章之后,觉得自己对数据库操作的理解又更深了,这篇文章真是太棒!
有20位网友表示赞同!
学习 Oracle 确实有挑战性,不过像这样的详细讲解就让人更有动力去深入了解。
有16位网友表示赞同!
分享一下这个 MERGE INTO 语句,希望可以帮助到和我一样的 Oracle 新手!
有18位网友表示赞同!
对技术细节的解释很清晰易懂,即使是初学者也能看明白。
有8位网友表示赞同!
学习编程的过程中,掌握优秀的数据库操作技巧很重要,这篇文章真是太及时了!
有17位网友表示赞同!
以后数据处理的时候,一定要试试 MERGE INTO 语句,希望能提高效率!
有8位网友表示赞同!
这个文章链接不错啊,收藏一下备用!
有18位网友表示赞同!
Oracle 数据库的确功能强大,值得我去深入学习。
有20位网友表示赞同!
太感谢作者了,这篇文章帮了我大忙!
有6位网友表示赞同!
以后遇到类似的问题,可以参考一下这种 MERGE INTO 语句的应用方法。
有5位网友表示赞同!
对 Oracle 数据库感兴趣的朋友们,一定要看看 这篇文章!
有19位网友表示赞同!
文章分析透彻,逻辑清晰,受益匪浅!
有6位网友表示赞同!