1. 程式人生 > >Oracle之merge into 解析

Oracle之merge into 解析

說明: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) 

查詢臨時表: 在這裡插入圖片描述

源表中的資料已經推送到臨時表。 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 (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 = '小黑’的一列已經被更新。