`

Oracle中Merge into的用法实例讲解

    博客分类:
  • sql
阅读更多
最近在做一个需求,就是涉及到表的问题,前端传过来一条数据,根据主键,查询数据库,如果不存在,那么久插入到数据库中一条,如果存在的话,就是以主键的方式,对数据库中的数据,进行更新。

拿到这个需求的时候,想的就是直接用if…else…代码进行判断,首先就是查询,查到了记录,就更新,没有查到,就进行数据的直接插入。

这种方法,本来是没有什么问题的,毕竟都能够完成要求,只是,因为数据库中这张表的记录,实在是太大,通过代码的方式,进行查询判断的话,实在是太消耗时间了,后来查询了一下,这才是找到Oracle数据库的merge into的方法完成。

首先,来看看merge into的基本语法(Oracle 9i引入的功能):

MERGE INTO table_name alias1 

USING (table|view|sub_query) alias2

ON (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);   


可能对于这个语法,不是太了解,那么咱们现在看一个简单的例子:

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的意思,就是代表着新的学生的id已经存在了数据库中的话,就是 when matched的时候,就执行update操作;when not matched的时候,执行插入操作。

相比起用代码的判断再执行更新或者插入操作,sql语句的执行,在效率上面来说,无疑是得到了一定的提高,所以使用merge into,还是一个不错的选择。

因为对数据库,不太熟悉,没有在第一时间,想到这种操作,这次用到了,也算是学习了,记录一下,以后说不定就是会有用到的时候。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics