oracle中merge into用法及实例解析
merge into的形式: 作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项,如下: 1.正常模式 2.只update或者只insert 3.带条件的update或带条件的insert 4.全插入insert实现 5.带delete的update(觉得可以用3来实现) 下面一一测试。测试建以下表: 其表结构截图如下图所示: A_MERGE表结构: B_MERGE表结构 C_MERGE表结构 1.正常模式先向A_MERGE和B_MERGE插入测试数据: insert into B_MERGE values(1,2,30,'吉林');insert into B_MERGE values(2,4,'yihe',33,'黑龙江'); insert into B_MERGE values(3,3,'山东'); commit; 此时A_MERGE和B_MERGE表中数据截图如下: A_MERGE表数据: B_MERGE表数据: 然后再使用merge into用B_MERGE来更新A_MERGE中的数据: 此时A_MERGE中的表数据截图如下: 2.只update模式
另一个数据时A中不存在的,插入数据语句如下: 此时A_MERGE和B_MERGE表数据截图如下: A_MERGE表数据截图: B_MERGE表数据截图: 然后再次用B_MERGE来更新A_MERGE,但是仅仅update,没有写insert部分。 commit;merge完之后A_MERGE表数据截图如下:可以发现仅仅更新了AID=1的年龄,没有插入AID=4的数据 3.只insert模式
此时A_MERGE和B_MERGE的表数据截图如下: A_MERGE表数据: B_MERGE表数据: 然后用B_MERGE来更新A_MERGE中的数据,此时只写了insert,没有写update: 此时A_MERGE的表数据截图如下: 4.带where条件的insert和update。我们在on中进行完条件匹配之后,还可以在后面的insert和update中对on筛选出来的记录再做一次条件判断,用来控制哪些要更新,哪些要插入。 测试数据的sql代码如下,我们在B_MERGE修改了两个人名,并且增加了两个人员信息,但是他们来自的省份不同, 所以我们可以通过添加省份条件来控制哪些能修改,哪些能插入: A_MGERGE表数据截图如下: B_MERGE表数据: 然后再用B_MERGE去更新A_MERGE,但是分别在insert和update后面添加了条件限制,控制数据的更新和插入: 此时A_MERGE截图如下: 5.无条件的insert。有时我们需要将一张表中所有的数据插入到另外一张表,此时就可以添加常量过滤谓词来实现,让其只满足匹配和不匹配,这样就只有update或者只有insert。这里我们要无条件全插入,则只需将on中条件设置为永假即可。用B_MERGE来更新C_MERGE代码如下: C_MERGE表在merge之前的数据截图如下: B_MERGE数据截图如下: C_MERGE表在merge之后数据截图如下: 6.带delete的updateMERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. 但我觉得这个带where条件的update差不多,都是控制update,完全可以用带where条件的update来实现。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |