Oracle中Merge into的用法实例讲解
最近在做一個(gè)需求,就是涉及到表的問(wèn)題,前端傳過(guò)來(lái)一條數(shù)據(jù),根據(jù)主鍵,查詢數(shù)據(jù)庫(kù),如果不存在,那么久插入到數(shù)據(jù)庫(kù)中一條,如果存在的話,就是以主鍵的方式,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù),進(jìn)行更新。
拿到這個(gè)需求的時(shí)候,想的就是直接用if…else…代碼進(jìn)行判斷,首先就是查詢,查到了記錄,就更新,沒(méi)有查到,就進(jìn)行數(shù)據(jù)的直接插入。
這種方法,本來(lái)是沒(méi)有什么問(wèn)題的,畢竟都能夠完成要求,只是,因?yàn)閿?shù)據(jù)庫(kù)中這張表的記錄,實(shí)在是太大,通過(guò)代碼的方式,進(jìn)行查詢判斷的話,實(shí)在是太消耗時(shí)間了,后來(lái)查詢了一下,這才是找到Oracle數(shù)據(jù)庫(kù)的merge into的方法完成。
首先,來(lái)看看merge into的基本語(yǔ)法(Oracle 9i引入的功能):
MERGE INTO table_name alias1 USING (table|view|sub_query) alias2ON (join condition) WHEN MATCHED THEN UPDATE table_name SET col1 = col_val1, col2 = col_val2 WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values);
可能對(duì)于這個(gè)語(yǔ)法,不是太了解,那么咱們現(xiàn)在看一個(gè)簡(jiǎn)單的例子:
merge into Students st using newStudents nst on (st.id = nst.id) when matched then update set st.name = nst.name when not matched then insert values(nst.id, nst.name, nst.sex)
這段sql的意思,就是代表著新的學(xué)生的id已經(jīng)存在了數(shù)據(jù)庫(kù)中的話,就是 when matched的時(shí)候,就執(zhí)行update操作;when not matched的時(shí)候,執(zhí)行插入操作。
相比起用代碼的判斷再執(zhí)行更新或者插入操作,sql語(yǔ)句的執(zhí)行,在效率上面來(lái)說(shuō),無(wú)疑是得到了一定的提高,所以使用merge into,還是一個(gè)不錯(cuò)的選擇。
因?yàn)閷?duì)數(shù)據(jù)庫(kù),不太熟悉,沒(méi)有在第一時(shí)間,想到這種操作,這次用到了,也算是學(xué)習(xí)了,記錄一下,以后說(shuō)不定就是會(huì)有用到的時(shí)候。
轉(zhuǎn)載于:https://www.cnblogs.com/liuzhihu/p/8176382.html
總結(jié)
以上是生活随笔為你收集整理的Oracle中Merge into的用法实例讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hihoCoder #1639 图书馆
- 下一篇: jq塞入不同状态html的写法 swit