,,oracle中merge into用法及实例解析

,,oracle中merge into用法及实例解析

本文主要介绍了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条件的更新来实现。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: