在维护代码的时候,看见merge into语句,遂查询记录如下。
在往数据库里保存数据的时候时常会遇到这种情况。如果一条记录已经存在,则更新相应的记录,如果不存在则插入这条新的记录。这时候就可以使用这个merge into来进行操作。至于如何判断一条记录是否存在,可以自己定义对应的判断条件。
其基本语法如下
merge into 表名 表别名 using 表名 表别名 on 条件
when matched then update .........
when not matched then insert.........
下面实际操作来看一下。
有如下表
对此表进行如下merge操作
MERGE INTO COURSE C USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC ON(C.CNO = NEWC.CNO) WHEN MATCHED THEN UPDATE SET C.TNO=NEWC.TNO WHEN NOT MATCHED THEN INSERT VALUES(NEWC.CNO,NEWC.CNAME,NEWC.TNO)
先看第二行using部分,这里是从原表选取数据,如果有其他表,当然可以换成其他表,这里不再建其他表,直接使用原表。在using后面的括号里面所选取出来的数据如下
此表命名为NEWC。将会用此表往原表merge,也就是SQL文merge into后面写的那张表course。
下面就要判断条件,判断NEWC中的记录是否已经存在。判断条件就是用ON关键字来提示的。这里的条件是
C.CNO = NEWC.CNO,也就是说如果原表C中已经存在相应的CNO的记录,表示该记录已经存在。对比发现CNO为6~10的记录在原表已经存在, 表示匹配,也是就matched,执行update子句,而cno为11~15的记录不存在,也就是not matched,执行insert子句。
执行结果如下。
发现原来06~10的记录TNO字段被更新,并且新插入了CNO为11~15的记录。
当然在merge的时候,可以只选用update不用insert,或者只选用insert不用update。这里不再举例。
这是merge最基本的用法了,当然如果愿意,可以在update或者insert后面添加where判断,只更新或者只插入满足where条件的记录,
将表恢复至原来状态,修改上面的SQL如下。
MERGE INTO COURSE C USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC ON(C.CNO = NEWC.CNO) WHEN MATCHED THEN UPDATE SET C.TNO=NEWC.TNO WHERE C.CNAME='PHP' WHEN NOT MATCHED THEN INSERT VALUES(NEWC.CNO,NEWC.CNAME,NEWC.TNO) WHERE NEWC.CNO<'12'
所得结果如下
对比发现,并不想第一条SQL那样,现在只更新了CNO为09的记录,也就是CNAME为PHP的记录。插入的时候只插入了CNO为11的记录,满足条件CNO<12。
在使用insert的时候,可以只插入部分字段,写法如下
INSERT(CNO, TNO) VALUES(NEWC.CNO, NEWC.TNO)
这样得到的结果就是插入记录的时候只插入CNO和TNO字段的值,而CNAME将会为空。具体不再演示。
在update后面还可配合delete语句,在更新的同时删除某些记录。
仍然把表回复原样,进行如下操作。
MERGE INTO COURSE C USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC ON(C.CNO = NEWC.CNO) WHEN MATCHED THEN UPDATE SET C.TNO=NEWC.TNO DELETE WHERE C.CNO>'09'
所得结果如下
对比发现,CNO为06~09的记录被更新,原有的CNO为10的记录被删除。
这里被删除记录不仅要满足DELETE关键字后面的where条件,还要满足ON关键字后面的条件,还要满足UPDATE后面where条件。
对原始表如下操作
MERGE INTO COURSE C USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC ON(C.CNO = NEWC.CNO) WHEN MATCHED THEN UPDATE SET C.TNO=NEWC.TNO WHERE C.CNO>'06' DELETE WHERE C.CNAME='C#'
所得结果如下
对比发现只更新CNO为06~10的记录,符合update语句后面的where条件,然而并没有删除CNAME为'C#'的记录原因是该条记录不满足update语句后面的where条件。
merge into的用法大致记录如上,有待后面实际的应用
相关推荐
Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...
本篇文章将详细介绍`MERGE INTO`的使用,包括两种常见的写法,并通过实例进行说明。 一、`MERGE INTO`的基本语法 `MERGE INTO`语句的基本结构如下: ```sql MERGE INTO target_table USING source_table ON (join...
标题:Oracle Merge Into 的使用 描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为...
以下是一些`MERGE INTO`的使用示例: 1. **更新匹配的记录**: ```sql MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np....
`MERGE INTO`语句的一个关键优势是它允许使用`WHERE`子句来细化更新和插入的规则。这意味着你可以控制哪些记录会被更新,哪些记录会被插入,甚至可以排除某些特定的记录不进行任何操作。这种精细的控制能力对于数据...
非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者
Oracle 数据库中 Merge Into 的用法 在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则...
DB2中的Merge语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,功能非常强大。
下面将详细阐述如何使用这两个工具以及如何通过`MERGE INTO`语句进行数据合并更新。 1. SQLULDR2导出数据: SQLULDR2是Oracle提供的一款数据导出工具,它能够快速地将数据库中的数据导出到文本文件或其他格式的...
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
例如,如果我们在使用 merge 方法前没有设置对象的 ID,那么 merge 方法将抛出异常。 在使用 merge 方法时,我们还需要注意 Session 的生命周期。在上面的示例代码中,我们可以看到,在第一个 Session 中,我们使用...
虽然`MERGE INTO`本身不直接支持删除操作,但可以通过在`WHEN MATCHED THEN`部分使用`DELETE`语句结合特定条件来实现,例如删除不再存在于源表中的目标表记录。 通过这些用法,我们可以高效地管理数据,并在单个...
主要类是pybigquery_merge_into.merge_clause.MergeInto() 。 例子 >> > query = MergeInto ( target = target , source = source , onclause = target . c . t1 == source . c . s1 , when_clauses = [ ...
【知识点详解】 ...通过以上介绍,我们了解了`MERGE INTO`语句的基本概念和使用方法,以及在实际场景中如何进行数据同步。在数据库管理和ETL过程中,合理运用`MERGE`能有效地提高数据处理的效率和准确性。
Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge 函数的基本语法结构为: ```sql MERGE INTO 目标表 USING 来源表 ON (条件) WHEN MATCHED THEN 更新操作 ...
##### 3.2 使用跟踪文件 除了alert.log外,Oracle还会为每个死锁生成一个跟踪文件(trace file),该文件包含了更多关于死锁的信息。在上述示例中提到的跟踪文件路径为 `e:\oracle\admin\GEDEON\udump\ORA01784.TRC...
Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...
1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...