ORACLE中的MERGE语法使用记录
項目中使用到了Oracle的MERGE INTO語句,在這里簡單記錄下使用方法
?
使用場景如下:
存在對一張數據量很大的表,你需要對里面的大量數據進行更新,如果數據不存在,就進行插入的操作。
常規想到的辦法是先根據條件查詢一番,如 果存在,那么就更新,否則就插入?
起始在Oracle9i 后可以用merge into輕輕松松搞定這個問題,避免多次的查詢判斷以及更新插入操作,而且效率更高
?
1.merge into簡介
用來合并UPDATE和INSERT語句。通過MERGE語句,根據一張表或子查詢的連接條件對另外一張表進行查詢,連接條件匹配上的進行SQL(例如UPDATE),無法匹配的執行SQL(例如INSERT)。
這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高于INSERT+UPDATE
?
2.merge into語法
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHENNOT MATCHED THEN
[INSERT sql]
;--不要忘記分號
作用:判斷B表和A表是否滿足ON中條件,如果滿足則執行對應sql語句,如果不滿足,則執行對應sql語句
?
另外有說明如下:
?
3.merge into基礎示例
---創建源表 Create Table OriginTable(id Int,caption VarChar(50)); ---創建操作表 Create Table TargetTable(id Int,caption VarChar(50)); --插入測試數據 Insert Into OriginTable(id,caption)VALUES(1,'測試1'); Insert Into OriginTable(id,caption)VALUES(2,'測試2'); Insert Into OriginTable(id,caption)VALUES(3,'測試3'); Insert Into OriginTable(id,caption)VALUES(4,'測試4'); Insert Into TargetTable(id,caption)VALUES(1,'目標表匹配到了源表則update1'); Insert Into TargetTable(id,caption)VALUES(2,'目標表匹配到了源表則update2'); Select * from OriginTable; Select * from TargetTable;MERGE INTO TargetTable USING OriginTable ON (TargetTable.id=OriginTable.id)
WHEN MATCHED --當上面on后的TargetTable.id=OriginTable.id時,則更新,也可以加上自定義的限制條件 MATCHED AND S.id=2
Then UpDate set TargetTable.caption=OriginTable.caption
When Not Matched --目標中沒有的id ,在源表中有則插入
Then Insert Values(OriginTable.id, OriginTable.caption)
;--Merge的最后結尾必須是以分號結束的,不能忘了分號 謹記:語法嚴格要求關鍵字之間只能有一個英文空格,不能有多余的空格
?
轉載于:https://www.cnblogs.com/widget90/p/9031790.html
總結
以上是生活随笔為你收集整理的ORACLE中的MERGE语法使用记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单线性回归预测实现
- 下一篇: Codeforces 976F