首页 > 数据库 >oracle merge into与sqlserver merge into 比较

oracle merge into与sqlserver merge into 比较

时间:2023-01-10 21:42:11浏览次数:46  
标签:insert into merge values oracle table bid


merge into:
在两个表之间,根据与源表联接的结果,对目标表执行插入、更新或删除操作。
Oracle在9i引入了merge into命令,SQL Server 2008也引入merge into。

不多说了,实例对比一下吧!


oracle merge into:

/*
drop table a;
drop table b;
*/

create table a (aid integer null,aname varchar2(10) null);
create table b (bid integer null,bname varchar2(10) null);

insert into a values(1,'aname1');
insert into a values(3,'aname3');
insert into a values(4,'aname4');

insert into b values(1,'bname1');
insert into b values(2,'bname2');
insert into b values(3,'bname3');

merge into a
using b
on (a.aid=b.bid)--必须加括号
when matched then
update set a.aname=b.bname where b.bid>1 --可加条件
when not matched then
insert values(b.bid,b.bname)

select * from a;
select * from b;

查看A表结果:

oracle merge into与sqlserver merge into 比较_Server


1. 条件id>1 不更新

2. 符合条件,更新目标表

3. 注意:目标表中,此行 aid<>bid,保留了下来

4. 目标表中不存在id=2的,插入到目标表

sqlserver2008  merge into:

/*
drop table a;
drop table b;
*/
create table a (aid int null,aname varchar(10) null);
create table b (bid int null,bname varchar(10) null);

insert into a values(1,'aname1');
insert into a values(3,'aname3');
insert into a values(4,'aname4');

insert into b values(1,'bname1');
insert into b values(2,'bname2');
insert into b values(3,'bname3');

merge into a
using b
on a.aid=b.bid --可不用括号
when matched then
update set a.aname=b.bname
when not matched then
insert values(b.bid,b.bname)
when not matched by source then --在a表中无操作的记录可执行删除
delete; --必须以分号结束


select * from a;
select * from b;

查看A表结果:

oracle merge into与sqlserver merge into 比较_sql_02


看,匹配的完全更新到A表!


oracle merge into 和 sqlserver 2008 merge into 的区别:

1. oracle在连接条件 on(a.aid=b.bid) 必须加括号,sqlserver 可以不用,也可以用。

2. oracle中目标表不参与的记录行只能保留,sqlserver 还可以执行删除。

3. oracle 在匹配条件中可以进一步添加更新的筛选条件,sqlserver不能增加条件约束。

4. oracle在语句结尾可加或不加分号,sqlserver 必定要在语句结束后添加分号“;”。




标签:insert,into,merge,values,oracle,table,bid
From: https://blog.51cto.com/hzc2012/6000694

相关文章

  • 下载Oracle_BI_DW_AC_10.1.3.4.1_for_MicrosoftWindows_and_InformaticaPowerCenter_a
    oracle官方下载地址:​​https://edelivery.oracle.com/​​1.注册或登录,必须要注册账户,很简单,注册一个,很多软件可以下载,都很有用。2.注册登录后,选择中国:china-CN,对下......
  • ORACLE 内置基本函数
    /*ORACLE内置基本函数*/--【把字符串转换成小写】SELECTLOWER('StructuredQueryLanguage')ASVALUEFROMdual;--【把字符串转换成大写】SELECTUPPER('StructuredQu......
  • [Oracle19C 数据库管理] 创建PDB
    使用PDB$SEED模板创建PDB通过PDB$SEED创建PDB数据库,将会触发以下动作:将文件从PDB$SEED文件夹复制到新创建的PDB数据库文件夹中。创建表空间SYSTEMSYSAUXUNDO创......
  • 查看oracle的归档日志
    按照天数计算SELECTto_char(FIRST_TIME,'YYYY-MM-DD')MD,ROUND(SUM(a.BLOCKS*a.BLOCK_SIZE)/1024/1024/1024)LOGsize_GFROMv$archived_logaWHEREa.STAND......
  • docker 部署 Oracle 19c
    标签(空格分隔):Oracle系列一:系统环境介绍操作系统:centos7.9x64oracle19c配置说明:主机名:cat/etc/hosts----172.16.10.11flyfish11172.16.10.12fl......
  • Oracle sqlplus参数autocommit(自动提交)的设置
    概述在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在Oracle数据库中,在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后......
  • 优化mybatis-plus批量新增(只对MySql生效Oracle不生效)
    因为mybatis-plus的批量新增是一条一条的耗费资源和慢所以进行批量优化  1.自定义Sql注入器MySqlInjector继承DefaultSqlInjectorpublicclassMySqlInjectorexten......
  • oracle-增加字段注释
    由于表和表字段没有添加注释,会在执行查看的时候无法理解每个表或者字段代表的含义,所以尽量给表或者字段添加上注释。语法:commentoncolumn表名.字段名is'注释信息......
  • Oracle GoldenGate Monitor 安装卡在生成库界面
    安装 OracleGoldenGateMonitor:java-jar-Xmx1024mfmw_12.1.3.0.0_ogg.jar如图:在generatinglibraries停止了,一个晚上也没有通过!点击查看日志,或者打开日志文件,搜索关......
  • oracle ,mysql,sqlserver 挑选特定行号的纪录
    oracle:SELECT*FROMtableWHEREROWNUM<101;minusSELECT*FROMtableWHEREROWNUM<91;mysql:select*fromtablelimit5,5第一个5是开始的行号,第二个5是选择纪录......