ITPub博客

首页 > Linux操作系统 > Linux操作系统 > merge into 的用法

merge into 的用法

原创 Linux操作系统 作者:0x0x0x 时间:2012-06-28 13:16:32 0 删除 编辑
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。
通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,
连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。
这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

在10g的基础上,又做了一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

首先创建测试数据:
create table t_merge (id varchar2(5),name varchar2(20),age number(3,0),sales number(10,2));
insert into t_merge values('1001','JIM',39,3000);
insert into t_merge values('1002','SUSAN',23,4000);
insert into t_merge values('1003','JACKEY',12,5000);
insert into t_merge values('1004','SCOT',33,6000);
COMMIT;
SELECT * FROM t_merge t;

第一:merge into when matched
merge into t_merge t
using (select '1001' id,'LILY' name,27 age,2500 sales from dual)t1
on (t.id=t1.id)
when matched then
update set t.sales=t1.sales
where t.id=t1.id
when not matched then
insert values('1005','TOM',35,8999);
 
第二:merge into when not matched
merge into t_merge t
using (select '1005' id,'LILY' name,27 age,2500 sales from dual)t1
on (t.id=t1.id)
when matched then
update set t.sales=t1.sales
where t.id=t1.id
when not matched then
insert values(t1.id,t1.name,t1.age,t1.sales)       ----------注意这个地方没有into t,并且用的是values()里面是列名!

第三:当要无条件insert 时,可以这样用:
merge into t_merge t
using (select '1006' id,'FIONA' name,29 age,6900 sales from dual)t1
on (1=2)                                                                     --------------即让连接条件不成立!
when matched then
update set t.sales=t1.sales
where t.id=t1.id
when not matched then
insert values(t1.id,t1.name,t1.age,t1.sales)
 
第四:新增加的delete
Oracle 10g中的MERGE提供了在执行数据操作时清除行的选项.
你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句.
DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.
merge into t_merge t
using (select '1005' id,'FIONA' name,29 age,6900 sales from dual)t1
on (t.id=t1.id)
when matched then
update set t.sales=t1.sales
delete where (t.name='LILY')                                ----------注意delete的格式!
when not matched then
insert values(t1.id,t1.name,t1.age,t1.sales)
 
 
 
点评:merge into的功能非常强大!而且效率也挺好的,不过使用时要小心!
 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26977915/viewspace-734045/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-06-26

  • 博文量
    35
  • 访问量
    92237