SQL中Merge用法詳解。本站提示廣大學習愛好者:(SQL中Merge用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL中Merge用法詳解正文
MERGE語句是SQL語句的一種。在SQL Server、Oracle數據庫中可用,MySQL、PostgreSQL中弗成用。MERGE是Oracle9i新增的語法,用來歸並UPDATE和INSERT語句。經由過程MERGE語句,依據一張表(原數據表,source table)或子查詢的銜接前提對別的一張(目的表,target table)表停止查詢,銜接前提婚配上的停止UPDATE,沒法婚配的履行INSERT。這個語法僅須要一次全表掃描就完成了全體任務,履行效力要高於INSERT+UPDATE。
merge重要用於兩表之間的聯系關系操作
oracle中 merge:
從oracle 9i開端支撐merge用法,10g有了完美
create table a (id_ integer,count_ integer); insert into a values(1,3); insert into a values(3,6); create table b (id_ integer,count_ integer); insert into b values(1,7); insert into b values(2,4); MERGE INTO a USING b ON (a.id_ = b.id_) WHEN MATCHED THEN UPDATE SET count_ = b.count_+a.count_ /* 留意指名count_屬於的表 */ WHEN NOT MATCHED THEN INSERT VALUES (b.id_,b.count_); commit; select * from a;
成果:
id_ count_
1 10
3 6
2 4
SQL Server 2008開端支撐merge:
有兩張構造分歧的表:test1,test2
create table test1 (id int,name varchar(20)) go create table test2 (id int,name varchar(20)) go insert into test1(id,name) values(1,'boyi55'),(2,'51cto'),(3,'bbs'),(4,'fengjicai'),(5,'alis') insert into test2(id,name) values(1,'boyi'),(2,'51cto')
將test1同步到test2中,沒有的數據停止拔出,已稀有據停止更新
merge test2 t --要更新的目的表 using test1 s --源表 on t.id=s.id --更新前提(即主鍵) when matched --假如主鍵婚配,更新 then update set t.name=s.name when not matched then insert values(id,name);--目的主未知主鍵,拔出。此語句必需以分號停止
運轉以下查詢檢查更新成果
select a.id,a.name as name_1,b.name as name_2 from test1 as a,test2 as b where a.id=b.id
id name_1 name_2
----------- -------------------- --------------------
1 boyi55 boyi55
2 51cto 51cto
3 bbs bbs
4 fengjicai fengjicai
5 alis alis