网站黄色在线观看视频,男人和女人操逼有免费的视频吗2018高清,91熟女丨老女人丨高潮丰满,丝袜高潮流白浆潮喷在线播放

中國站

中國站

國際版

聯(lián)系我們

400-002-9968

售前咨詢

售后服務(wù)

注冊 登錄

博客 > SQL知識:SQL語句MERGE合并定義及示例

SQL知識:SQL語句MERGE合并定義及示例

  • 標(biāo)簽:
  • MERGE
  • SQL
  • SQL語句
  • MERGE合并

瀏覽量:1622次評論:0次

作者:銳成網(wǎng)絡(luò)整理時(shí)間:2024-05-29 16:33:02

作為SQL語句中的一種,MERGE合并可以在SQL Server以及Oracle數(shù)據(jù)庫中使用。作為SQL語言中非常重要且強(qiáng)大的一種語句,MERGE合并語句具有廣泛的應(yīng)用場景。今天我們將深入介紹MERGE合并定義、語法、用法及示例。

MERGE的定義

MERGE關(guān)鍵字是一個(gè)神奇的DML關(guān)鍵字,它能將INSERT,UPDATE,DELETE等操作并為一句,根據(jù)與源表聯(lián)接的結(jié)果,對目標(biāo)表執(zhí)行插入、更新或刪除操作。

SQL知識:SQL語句MERGE合并定義及示例

MERGE的語法

MERGE INTO target_table
USING source_table
ON condition
WHEN MATCHED THEN
operation
WHEN NOT MATCHED THEN
operation;

注意:其中最后語句分號不可以省略,且源表既可以是一個(gè)表也可以是一個(gè)子查詢語句。

MERGE的用法

merge無法多次更新同一行,也無法更新和刪除同一行。

當(dāng)源表和目標(biāo)表不匹配時(shí):

  • 若數(shù)據(jù)是源表有目標(biāo)表沒有,則進(jìn)行插入操作;
  • 若數(shù)據(jù)是源表沒有而目標(biāo)表有,則進(jìn)行更新或者刪除數(shù)據(jù)操作

當(dāng)源表和目標(biāo)表匹配時(shí):

  • 進(jìn)行更新操作或者刪除操作

MERGE的使用場景

  • 數(shù)據(jù)同步
  • 數(shù)據(jù)轉(zhuǎn)換
  • 基于源表對目標(biāo)表做INSERT,UPDATE,DELETE操作

我們常用的是第三種場景

MERGE使用限制

在 MERGE MATCHED 操作中,只能允許執(zhí)行 UPDATE 或者 DELETE 語句。

在 MERGE NOT MATCHED 操作中,只允許執(zhí)行 INSERT 語句。

一個(gè) MERGE語句中出現(xiàn)的MATCHED操作,只能出現(xiàn)一次 UPDATE 或者 DELETE 語句,否則就會出現(xiàn)下面的錯(cuò)誤:An action of type 'WHEN MATCHED' cannot appear more than once in a 'UPDATE' clause of a MERGE statement.

MERGE示例

下面我們通過一個(gè)示例來介紹一下該如何使用MERGE,我們以Customers表和Orders表為例。數(shù)據(jù)如下:

SQL知識:SQL語句MERGE合并定義及示例

Customers

SQL知識:SQL語句MERGE合并定義及示例

Orders

Q:當(dāng)Customers表里的客戶有購買商品,我們就更新一下他們的下單時(shí)間,將他們的下單時(shí)間往后推遲一小時(shí),如果客戶沒有購買商品,那么我們就將這些客戶的信息插入到訂單表里。

根據(jù)上面的要求我們可以這樣寫SQL:

MERGE INTO Orders O
--確定目標(biāo)表Orders
USING Customers C ON C.客戶ID=O.客戶ID  
--從源表Customers確定關(guān)聯(lián)條件 C.客戶ID=O.客戶ID
WHEN MATCHED  
--當(dāng)匹配時(shí)對目標(biāo)表的訂單日期執(zhí)行更新操作
THEN 
UPDATE SET O.訂單日期=DATEADD(HOUR,1,O.訂單日期)
WHEN NOT MATCHED BY TARGET
--當(dāng)不匹配時(shí)對目標(biāo)表進(jìn)行插入操作
THEN INSERT (客戶ID,員工ID,訂單日期,發(fā)貨ID)
VALUES (C.客戶ID,NULL,NULL,NULL)
;

我們看一下Orders表里的結(jié)果:

SQL知識:SQL語句MERGE合并定義及示例

我們發(fā)現(xiàn)與Customers表里匹配上的訂單日期被修改了,訂單日期往后推遲了一小時(shí),而沒有匹配上的在訂單表尾部增加了幾行記錄。這就是MERGE的實(shí)際應(yīng)用了。

OUTPUT子句

MERGE還能與OUTPUT一起使用,可以將剛剛做過變動的數(shù)據(jù)進(jìn)行輸出,我們以上面的示例為基礎(chǔ),進(jìn)行示范。

MERGE INTO Orders O
--確定目標(biāo)表Orders
USING Customers C ON C.客戶ID=O.客戶ID
--從源表Customers確定關(guān)聯(lián)條件 C.客戶ID=O.客戶ID
WHEN MATCHED 
--當(dāng)匹配時(shí)對目標(biāo)表的訂單日期執(zhí)行更新操作
THEN 
UPDATE SET O.訂單日期=DATEADD(HOUR,1,O.訂單日期)
WHEN NOT MATCHED BY TARGET
--當(dāng)不匹配時(shí)對目標(biāo)表進(jìn)行插入操作
THEN INSERT (客戶ID,員工ID,訂單日期,發(fā)貨ID)
VALUES (C.客戶ID,NULL,NULL,NULL)
OUTPUT $action AS [ACTION],Inserted.訂單日期 ,
Inserted.客戶ID,Inserted.發(fā)貨ID,Inserted.員工ID
--用OUTPUT輸出剛剛變動過的數(shù)據(jù)
;

執(zhí)行上述語句結(jié)果如下:

SQL知識:SQL語句MERGE合并定義及示例

從上圖我們看到,執(zhí)行的動作都是更新,這里的動作只有UPDATE和DELETE,插入也屬于更新,此外我們看到訂單日期又往后推遲了一小時(shí),是因?yàn)槲覀冇忠淮螆?zhí)行了往后增加一小時(shí)的更新操作,其他的字段沒變。

重要聲明:本文來自SQL數(shù)據(jù)庫開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識和信息。

我的評論

還未登錄?點(diǎn)擊登錄

微信掃碼溝通
微信掃碼溝通

微信掃碼溝通

AI
return head