本文主要介绍了oracle中merge into的用法和实例分析。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。
合并表单:
使用[源表SQL]B ON([条件表达式]和[)合并到[目标表] A中.].)
当匹配时
[更新sql]
当不匹配时
[插入sql]
功能:确定表B和表A是否满足中的条件。如果是,使用表B更新表a。如果不是,将表B的数据插入表a。有许多选项,如下所示:
1.自然振荡
2.仅更新或仅插入
3.条件更新或条件插入
4.完全插入插入实现
5.用delete更新(我觉得可以用3实现)
下面一一测试。
测试下表:
创建表A_MERGE
(
身份证号不为空,
name VARCHAR2(12)不为空,
年份编号
);
创建表B_MERGE
(
身份证号不为空,
aid号码不为空,
name VARCHAR2(12)不为空,
年份编号,
城市VARCHAR2(12)
);
创建表C_MERGE
(
身份证号不为空,
name VARCHAR2(12)不为空,
city VARCHAR2(12)不为空
);
提交;
表格结构截图如下图所示:
_合并表格结构:
b _合并表结构
c _合并表结构
1.正常模式
首先将测试数据插入A_MERGE和B_MERGE:
插入到A_MERGE值中(1, liuwei ,20);
插入到一个_MERGE值中(2,‘张斌’,21);
插入到A_MERGE值中(3,郭芙,20);
提交;
插入B _ Merge值(1,2,张斌,30,吉林);
插入B _ Merge值(2,4,义和,33,黑龙江);
插入B _ Merge值(3,3,郭芙,山东);
提交;
此时,表A_MERGE和B_MERGE中的数据截图如下:
合并表格数据(_ e):
b _合并表格数据:
然后使用merge into用B_MERGE更新A_MERGE中的数据:
合并到A_MERGE A使用(select B.AID,B.NAME,B . YEAR from B _ MERGE B)C ON(A . id=C . AID)
当匹配时
更新设置A.YEAR=C.YEAR
当不匹配时
插入(身份证,姓名,年份)值(身份证,姓名,年份);
提交;
此时,A_MERGE中的表数据截图如下:
2.只update模式
首先,将两段数据插入B_MERGE。为了显示只有更新而没有插入,一段数据必须已经存在于。
如果中不存在其他数据,请按如下方式插入数据语句:
插入B _ Merge值(4,1,六圩,80,江西);
插入B _ Merge值(5,5,天年,23,河南);
提交;
此时,表A_MERGE和表B_MERGE的截图如下:
_MERGE表数据的屏幕截图:
B_MERGE表数据截图:
然后再次用B_MERGE更新A_MERGE,但只更新,不写插入部分。
合并到A_MERGE A使用(select B.AID,B.NAME,B . YEAR from B _ MERGE B)C ON(A . ID=C . AID)
当匹配时
更新设置A . YEAR=C . YEAR
提交;
合并后的表A_MERGE数据截图如下:可以发现只更新了AID=1的年龄,没有插入AID=4的数据。
3.只insert模式
先在B_MERGE中更改一个数据,因为上次测试更新时新添加的数据没有插入A_MERGE,这次可以使用。
update B_MERGE set year=70其中AID=2;
提交;
此时,A_MERGE和B_MERGE的表格数据截图如下:
合并表格数据(_ e):
b _合并表格数据:
然后使用B_MERGE更新A_MERGE中的数据。此时,只写入insert,而不写入update:
合并到A_MERGE A使用(select B.AID,B.NAME,B . YEAR from B _ MERGE B)C ON(A . ID=C . AID)
当不匹配时
插入(身份证,姓名,年份)值(身份证,姓名,年份);
提交;
此时,A_MERGE的表格数据截图如下:
4.带where条件的insert和update。
在on中进行条件匹配后,我们可以在后期的插入和更新中对on筛选出的记录进行另一个条件判断,用来控制哪些更新,哪些插入。
测试数据的sql代码如下。我们修改了两个人的名字,在B_MERGE中添加了两个人的信息,但是他们来自不同的省份。
所以我们可以通过添加省条件来控制哪些可以修改,哪些可以插入:
update B_MERGE set name=yihe 其中id=2;
update B_MERGE set name=liuwei 其中id=4;
插入B _ Merge值(6,6,宁秦,23,江西);
插入B _ merge值(7,7,兵,24,吉安);
提交;
表A_MGERGE数据截图如下:
b _合并表格数据:
然后用B_MERGE来更新A_MERGE,但是在insert和update之后增加了条件来控制数据的更新和插入:
使用(从B_MERGE B中选择B.AID,B.name,B.year,B . city)C
开(A.id=C.AID)
当匹配时
更新SET A.name=C.name其中C.city!=江西
当不匹配时
插入(a.id,a.name,a.year)值(c.aid,c.name,c.year)其中c.city=江西;
提交;
此时,A_MERGE的截图如下:
5.无条件的insert。
有时我们需要将一个表中的所有数据插入到另一个表中。这时候我们可以添加一个常量过滤谓词来实现,让它只满足匹配和不匹配,这样就只有更新或者只有插入。在这里,如果我们想要无条件地插入,我们只需要将on中的条件设置为forever false。用B_MERGE更新C_MERGE代码,如下所示:
合并到C_MERGE C使用(select B.AID,B.NAME,B.City from B_MERGE B) C ON (1=0)
当不匹配时
插入(C.ID,C.NAME,C.City)值(B.AID,B.NAME,B . City);
提交;
合并前C_MERGE表的数据截图如下:
B_MERGE数据截图如下:
合并后C_MERGE表的数据截图如下:
6.带delete的update
MERGE提供了在执行数据操作时清除行的选项。您可以在WHEN MATCHED THEN UPDATE子句中包含DELETE子句。
DELETE子句必须有一个WHERE条件来删除符合特定条件的行。符合DELETE WHERE条件但不符合on条件的行将不会从表中删除。
但是我认为这个更新跟where条件几乎是一样的。都是为了控制更新,完全可以用带where条件的更新来实现。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。