iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >oracle中merge into如何使用
  • 912
分享到

oracle中merge into如何使用

2024-04-02 19:04:59 912人浏览 安东尼
摘要

oracle中merge into如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。merge into的形式:MERGE IN

oracle中merge into如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

merge into的形式:

MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...) 
WHEN MATCHED THEN 
  [UPDATE sql] 
WHEN NOT MATCHED THEN 
  [INSERT sql]

作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项,如下:

1.正常模式

2.只update或者只insert

3.带条件的update或带条件的insert

4.全插入insert实现

5.带delete的update(觉得可以用3来实现)

下面一一测试。

测试建以下表:

create table A_MERGE 
( 
 id  NUMBER not null, 
 name VARCHAR2(12) not null, 
 year NUMBER 
); 
create table B_MERGE 
( 
 id  NUMBER not null, 
 aid NUMBER not null, 
 name VARCHAR2(12) not null, 
 year NUMBER, 
 city VARCHAR2(12) 
); 
create table C_MERGE 
( 
 id  NUMBER not null, 
 name VARCHAR2(12) not null, 
 city VARCHAR2(12) not null 
); 
commit;

其表结构截图如下图所示:

A_MERGE表结构:

oracle中merge into如何使用

B_MERGE表结构

oracle中merge into如何使用

C_MERGE表结构

oracle中merge into如何使用

1.正常模式

先向A_MERGE和B_MERGE插入测试数据:

insert into A_MERGE values(1,'liuwei',20); 
insert into A_MERGE values(2,'zhangbin',21); 
insert into A_MERGE values(3,'fuguo',20); 
commit; 
 
insert into B_MERGE values(1,2,'zhangbin',30,'吉林'); 
insert into B_MERGE values(2,4,'yihe',33,'黑龙江'); 
insert into B_MERGE values(3,3,'fuguo',,'山东'); 
commit;

此时A_MERGE和B_MERGE表中数据截图如下:

A_MERGE表数据:

oracle中merge into如何使用

B_MERGE表数据:

oracle中merge into如何使用

然后再使用merge into用B_MERGE来更新A_MERGE中的数据:

MERGE INTO A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON (A.id=C.AID) 
WHEN MATCHED THEN 
 UPDATE SET A.YEAR=C.YEAR  
WHEN NOT MATCHED THEN 
 INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR); 
commit;

此时A_MERGE中的表数据截图如下:

oracle中merge into如何使用

2.只update模式

首先向B_MERGE中插入两个数据,来为了体现出只update没有insert,必须有一个数据是A中已经存在的

另一个数据时A中不存在的,插入数据语句如下:

insert into B_MERGE values(4,1,'liuwei',80,'江西'); 
insert into B_MERGE values(5,5,'tiantian',23,'河南'); 
commit;

此时A_MERGE和B_MERGE表数据截图如下:

A_MERGE表数据截图:

oracle中merge into如何使用

B_MERGE表数据截图:

oracle中merge into如何使用

然后再次用B_MERGE来更新A_MERGE,但是仅仅update,没有写insert部分。

merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID) 
WHEN MATCHED THEN 
 UPDATE SET A.YEAR=C.YEAR; 
  
commit;

merge完之后A_MERGE表数据截图如下:可以发现仅仅更新了AID=1的年龄,没有插入AID=4的数据

oracle中merge into如何使用

3.只insert模式

首先改变B_MERGE中的一个数据,因为上次测试update时新增的数据没有插入到A_MERGE,这次可以用。

update B_MERGE set year=70 where AID=2; 
commit;

此时A_MERGE和B_MERGE的表数据截图如下:

A_MERGE表数据:

oracle中merge into如何使用

B_MERGE表数据:

oracle中merge into如何使用

然后用B_MERGE来更新A_MERGE中的数据,此时只写了insert,没有写update:

merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID) 
WHEN NOT MATCHED THEN 
  insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR); 
commit;

此时A_MERGE的表数据截图如下:

oracle中merge into如何使用

4.带where条件的insert和update。

我们在on中进行完条件匹配之后,还可以在后面的insert和update中对on筛选出来的记录再做一次条件判断,用来控制哪些要更新,哪些要插入。

测试数据的sql代码如下,我们在B_MERGE修改了两个人名,并且增加了两个人员信息,但是他们来自的省份不同,

所以我们可以通过添加省份条件来控制哪些能修改,哪些能插入:

update B_MERGE set name='yihe++' where id=2; 
update B_MERGE set name='liuwei++' where id=4; 
insert into B_MERGE values(6,6,'ningqin',23,'江西'); 
insert into B_MERGE values(7,7,'bing',24,'吉安'); 
commit;

A_MGERGE表数据截图如下:

oracle中merge into如何使用

B_MERGE表数据:

oracle中merge into如何使用

然后再用B_MERGE去更新A_MERGE,但是分别在insert和update后面添加了条件限制,控制数据的更新和插入:

merge into A_MERGE A USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C  
ON(A.id=C.AID)  
when matched then 
 update SET A.name=C.name where C.city != '江西' 
when not matched then 
 insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city='江西'; 
commit;

此时A_MERGE截图如下:

oracle中merge into如何使用

5.无条件的insert。

有时我们需要将一张表中所有的数据插入到另外一张表,此时就可以添加常量过滤谓词来实现,让其只满足匹配和不匹配,这样就只有update或者只有insert。这里我们要无条件全插入,则只需将on中条件设置为永假即可。用B_MERGE来更新C_MERGE代码如下:

merge into C_MERGE C USING (select B.AID,B.NAME,B.City from B_MERGE B) C ON (1=0) 
when not matched then 
 insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City); 
commit;

C_MERGE表在merge之前的数据截图如下:

oracle中merge into如何使用

B_MERGE数据截图如下:

oracle中merge into如何使用

C_MERGE表在merge之后数据截图如下:

oracle中merge into如何使用

6.带delete的update

MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. 
DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.

但我觉得这个带where条件的update差不多,都是控制update,完全可以用带where条件的update来实现。

看完上述内容,你们掌握oracle中merge into如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: oracle中merge into如何使用

本文链接: https://www.lsjlt.com/news/56275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle中merge into如何使用
    oracle中merge into如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。merge into的形式:MERGE IN...
    99+
    2024-04-02
  • mysql如何实现merge into语法
    这篇文章主要介绍了mysql如何实现merge into语法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 my...
    99+
    2024-04-02
  • mysql中into如何使用
    这篇文章主要讲解了“mysql中into如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中into如何使用”吧! ...
    99+
    2024-04-02
  • sybase中如何使用select into
    这篇文章给大家分享的是有关sybase中如何使用select into的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在sybase中使用select into...
    99+
    2024-04-02
  • SQLServer中merge函数如何使用
    本篇文章给大家分享的是有关SQLServer中merge函数如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Merge关键字是一个神奇的...
    99+
    2024-04-02
  • Java中merge()函数如何使用
    Java中merge()函数如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。merge() 怎么用假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,...
    99+
    2023-06-16
  • 如何在python中使用merge函数
    本篇文章为大家展示了如何在python中使用merge函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lon...
    99+
    2023-06-14
  • merge()函数如何在Pandas中使用
    今天就跟大家聊聊有关merge()函数如何在Pandas中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、merge函数用途pandas中的merge()函数类似于SQL中jo...
    99+
    2023-06-14
  • Mysql中如何使用MERGE存储引擎
    本篇文章为大家展示了Mysql中如何使用MERGE存储引擎,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MERGE 存储引擎把一组 MyISAM 数据表当做一个逻辑...
    99+
    2024-04-02
  • oracle中insert into select用法
    insert into select 语句用于将一个表中的数据插入到另一个表。它支持插入所有列或特定列,并可以通过 where 子句使用条件进行筛选。通过指定目标表、...
    99+
    2024-05-08
    oracle
  • oracle的merge语句怎么使用
    Oracle的MERGE语句用于合并数据,可以同时执行INSERT、UPDATE、DELETE操作。它的基本语法如下: MERGE ...
    99+
    2024-04-09
    oracle
  • oracle的insert into怎么使用
    Oracle的INSERT INTO语句用于向表中插入新的行。语法如下:```INSERT INTO table_name (col...
    99+
    2023-08-29
    oracle
  • android studio的merge如何使用
    在Android Studio中,Merge是一个用于合并代码的工具。它可以将两个或多个分支的代码合并为一个新的分支,以解决代码冲突...
    99+
    2024-02-29
    android
  • Oracle在DML语句中使用returing into子句
    一、概述: ORACLE的DML语句中可以指定RETURNING语句。使用起来也很简单,和SELECT INTO语句没有多大区别。RETURNING语句的使用在很多情况下可以...
    99+
    2024-04-02
  • oracle中select into使用报错怎么解决
    如果在Oracle中使用SELECT INTO语句时出现错误,可能有以下几种原因和解决方法: ORA-00905错误:缺少关键字...
    99+
    2024-04-09
    oracle
  • oracle中select into使用的方法是什么
    在Oracle中,可以使用SELECT INTO语句将查询的结果存储到一个变量或者表中。 使用SELECT INTO语句将查...
    99+
    2024-04-09
    oracle
  • oracle fetch into语句怎么使用
    FETCH INTO语句用于从游标中获取数据,并将其存储在指定的变量中。下面是FETCH INTO语句的使用方法:1. 首先,声明一...
    99+
    2023-10-18
    oracle
  • 如何使用R中的merge()函数合并数据
    本篇内容主要讲解“如何使用R中的merge()函数合并数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用R中的merge()函数合并数据”吧!使用R中merge()函数合并数据在R中可以...
    99+
    2023-07-05
  • Python中的Merge怎么使用
    这篇文章主要介绍了Python中的Merge怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中的Merge怎么使用文章都会有所收获,下面我们一起来看看吧。meragepandas提供了一个类似...
    99+
    2023-07-05
  • sqlserver中select into怎么使用
    SELECT INTO语句可以将查询的结果集插入到新的表中。语法如下: SELECT column1, column2, ....
    99+
    2024-04-09
    sqlserver
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作