说明:Merge语句是Oracle 9i中新增的语法,我们在进行数据推送时,经常会遇到大量的同时进行Insert/Update的语句 ,也就是说条件匹配时,就更新数据库(Update),不匹配时,就插入(Insert)到数据库。
效率:这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE
1.insert/update用法:
设计数据库两张表:源表(Student_Message)、临时表(Student_Mid)
-- Create table:源表(Student_Message)
create table STUDENT_MESSAGE
(
id VARCHAR2(6),
name VARCHAR2(6),
adress VARCHAR2(10)
)
tablespace EXAMPLE
pctfree 10
initrans 1
maxtrans 255;
-- Add comments to the columns
comment on column STUDENT_MESSAGE.id
is '学生编号';
comment on column STUDENT_MESSAGE.name
is '学生名称';
comment on column STUDENT_MESSAGE.adress
is '家庭住址';
//临时表建法同上,只需修改表名
现向数据库添加信息,如下:
源表:
临时表:
执行SQL语句:
Merge into (select * from student_mid) t1
using (select * from student_message) t2 on ( = )
WHEN MATCHED THEN
Update set = ,t1.adress = t2.adress
WHEN NOT MATCHED THEN
Insert (,,t1.adress) values (,,t2.adress)
查询临时表:
源表中的数据已经推送到临时表。
SQL语句具体结构:
Merge into (要导入信息的表)
using (数据源表,存放最开始的数据的表)
on (这里加匹配条件,需要多条件时,用and连接)
WHEN MATCHED THEN(匹配时修改,on条件中的不需要添加)
WHEN NOT MATCHED THEN(不匹配时添加,on条件中的需要添加)
2.关于Merge 中delete的用法:
delete没有不匹配的时候,直接跟在update后面,添加delete where+条件
Merge into (select * from student_mid) t1
using (select * from student_message) t2 on ( = )
WHEN MATCHED THEN
Update set = ,t1.adress = t2.adress
--按条件删除
DELETE WHERE ( = '小黑')
WHEN NOT MATCHED THEN
Insert (,,t1.adress) values (,,t2.adress)
输出结果为:
数据临时表中,name = '小黑’的一列已经被更新。