Oracle之merge into 解析
阿新 • • 發佈:2018-12-21
說明: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 (t1.id = t2.id)
WHEN MATCHED THEN
Update set t1.name = t2.name,t1.adress = t2.adress
WHEN NOT MATCHED THEN
Insert (t1.id,t1.name,t1.adress) values (t2.id,t2.name,t2.adress)
查詢臨時表:
Merge into (select * from student_mid) t1 using (select * from student_message) t2 on (t1.id = t2.id) WHEN MATCHED THEN Update set t1.name = t2.name,t1.adress = t2.adress --按條件刪除 DELETE WHERE (t1.name = '小黑') WHEN NOT MATCHED THEN Insert (t1.id,t1.name,t1.adress) values (t2.id,t2.name,t2.adress)
輸出結果為: 資料臨時表中,name = '小黑’的一列已經被更新。