Oracle 的merge into 用法


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子句來去除一些不需要的行 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM