SQL中Merge用法詳解
MERGE語句是SQL語句的一種。在SQL Server、Oracle數(shù)據(jù)庫中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的語法,用來合并UPDATE和INSERT語句。通過MERGE語句,根據(jù)一張表(原數(shù)據(jù)表,source table)或子查詢的連接條件對另外一張(目標表,target table)表進行查詢,連接條件匹配上的進行UPDATE,無法匹配的執(zhí)行INSERT。這個語法僅需要一次全表掃描就完成了全部工作,執(zhí)行效率要高于INSERT+UPDATE。
merge主要用于兩表之間的關(guān)聯(lián)操作
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;
結(jié)果:
id_ count_
1 10
3 6
2 4
SQL Server 2008開始支持merge:
有兩張結(jié)構(gòu)一致的表: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中,沒有的數(shù)據(jù)進行插入,已有數(shù)據(jù)進行更新
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);--目標主未知主鍵,插入。此語句必須以分號結(jié)束
運行以下查詢查看更新結(jié)果
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
相關(guān)文章
SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實例
這篇文章主要介紹了SQL Server中使用Trigger監(jiān)控存儲過程更改腳本實例,本文使用一個表來記錄存儲過程更改過程,需要的朋友可以參考下2015-07-07SQL創(chuàng)建數(shù)據(jù)庫時遇到:在數(shù)據(jù)庫master中拒絕了 CREATE DATABASE 權(quán)限
今天在創(chuàng)建數(shù)據(jù)庫的時候,遇到了沒有創(chuàng)建數(shù)據(jù)庫權(quán)限的問題,本文主要介紹了SQL創(chuàng)建數(shù)據(jù)庫時遇到:在數(shù)據(jù)庫master中拒絕了CREATE DATABASE權(quán)限,感興趣的可以了解一下2024-04-04SQL Server中使用判斷語句(IF ELSE/CASE WHEN )案例
這篇文章主要介紹了SQL Server中使用判斷語句(IF ELSE/CASE WHEN )案例,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07SQLServer 附加數(shù)據(jù)庫后出現(xiàn)只讀或失敗的解決方法
如果你在附加SQL數(shù)據(jù)庫,出現(xiàn)只讀或失敗的情況,來看下本文的解決方案吧。2010-03-03Visual?Studio2022連接SQL?Server數(shù)據(jù)庫的詳細圖文教程
在visual studio中經(jīng)常會用到SQL的數(shù)據(jù),關(guān)于數(shù)據(jù)連接總是會出現(xiàn)一系列的問題,下面這篇文章主要給大家介紹了關(guān)于Visual?Studio2022連接SQL?Server數(shù)據(jù)庫的詳細圖文教程,需要的朋友可以參考下2023-06-06在 SQLSERVER 中快速有條件刪除海量數(shù)據(jù)
最近有個朋友問我,他說他在SQLSERVER刪除幾百萬到幾千萬數(shù)據(jù)是顯的很慢,幫他分析了一下,提了一些以下意見,或許對很多人有用。2008-10-10萬能密碼的SQL注入漏洞其PHP環(huán)境搭建及防御手段
這篇文章主要介紹了萬能密碼的SQL注入漏洞其PHP環(huán)境搭建及防御手段,對此感興趣的小伙伴趕快收藏起來吧2021-09-09SQL Server在AlwaysOn中使用內(nèi)存表的“踩坑”記錄
這篇文章主要給大家介紹了關(guān)于SQL Server在AlwaysOn中使用內(nèi)存表的一些"踩坑"記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習下吧。2017-09-09