程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle 的merge into 用法,oraclemerge

Oracle 的merge into 用法,oraclemerge

編輯:Oracle教程

Oracle 的merge into 用法,oraclemerge


1.merge into的用途

Merge是一個非常有用的功能,與DB2中的merge into功能幾乎一樣,與Mysql裡的insert into on duplicate key也很類似。MERGE INTO 是Oracle 9i以後才出現的新的功能。簡單來說可以是一個“有則更新,無則插入”的功能。

通過Merge into你能夠在一個SQL語句中對一個表同時執行inserts和updates操作. 當然是update還是insert是依據於你的指定的條件判斷的,Merge into可以實現用B表來更新A表數據,如果A表中沒有,則把B表的數據插入A表. MERGE命令從一個或多個數據源中選擇行來updating或inserting到一個或多個表 。

2.Merge into的基本語法

語法如下 :

1 MERGE [INTO [schema .] table [t_alias] 
2 USING [schema .] { table | view | subquery } [t_alias] 
3 ON ( condition ) 
4 WHEN MATCHED THEN [merge_update_clause ]
5 WHEN NOT MATCHED THEN [merge_insert_clause];

通俗點就是如下的語法

1 MERGE INTO [表名] [表別名] 
2 USING ( [查詢內容] )[或者像表查詢一樣的語句] 
3 ON ([條件表達式] AND [...]...) 
4 WHEN MATHED THEN [匹配的update操作] 
5 WHEN NOT MATHED THEN [不匹配的insert操作] 

舉個例子看看:

1 merge into Students st using newStudents nst on (st.id = nst.id) 
2 when matched then 
3 update set st.name = nst.name 
4 when not matched then 
5 insert values(nst.id, nst.name, nst.sex) 

前面的merger into Students using newStudents 意思是用newStudents表來merge到Students表,匹配關系就是根據on後面的條件子句的內容,這裡根據兩個表的id來進行匹配,那麼匹配上了我們的操作是就是when matched then的子句裡的動作了,這裡的動作是update set st.name =nst.name, 就是把newStudents裡的name,賦值到Students的name裡。如果沒有匹配上則insert這樣的一條語句進去。通過這個簡單的小例子,這個merget inot的用法還是比較容易理解的。這裡merger into的功能,好比比較,然後選擇更新或者是插入,像是武術套路的一套組合拳。在做merge into的時候,這樣同樣的情況下,merge的性能是優於同等功能的update/insert語句的。有分析說merge into是單純的insert/update效率的好幾倍,本人沒有考究過,不做評論 。 

3.Oracle 10g後的改進

在Oracle 10g中MERGE有如下一些改進: 
1、UPDATE或INSERT子句是可選的 
2、UPDATE和INSERT子句可以加WHERE子句 
3、在ON條件中使用常量過濾謂詞來insert所有的行到目標表中,不需要連接源表和目標表 
4、UPDATE子句後面可以跟DELETE子句來去除一些不需要的行 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved