sql--MERGE INTO

可以同时增删改

旧表倒新表

语法如下:

sql 复制代码
MERGE INTO 表名1       ---目标表(即要对此表进行增删改)
	 USING 表名2       ---数据源(给表1提供数据的)
	 	ON (关联条件)  ---必须是主键列或者唯一列

关联条件匹配成功时,可以将表2 的数据修改到表1,当无匹配数据的时候,可以将表2 的数据增加到表1中

sql 复制代码
MERGE INTO 表名1       ---目标表(即要对此表进行增删改)
	 USING 表名2       ---数据源(给表1提供数据的)
	 	ON (关联条件)  ---必须是主键列或者唯一列
WHEN MATCHED 
	THEN UPDATE SET 表1.列名1= 值1 | 表名2.列名1 |  
		WHERE 条件1      ---当匹配成功的时候,然后修改表1(不需要写表1了)
		--或者可以写 DELETE(可以不写)
 		 DELETE
 		 	WHERE 条件2  ---如果前面还有条件1,要想删除,必须同时满足条件1,条件2(DELETE很少做的)
 		 	---已经可以结束了,必须要有UPDATE,不能只有DELETE,DELETE可以没有
WHEN NOT MATCHED   		---当匹配不成功的时候
	THEN INSERT (表名1.列名1,表名1.列名2,表名1.列名3......)
		VALUES(表名2.列名1,表名2.列名2,表名2.列名3.....)

merge into 是英文的一个短语,意思是汇入,合并。顾名思义,merge into是合并了insert和update操作,其执行效率要高于分别单独执行insert和update语句。

//创建表

sql 复制代码
create table YLB_TEST_001
(  ID   NUMBER,  NAME VARCHAR2(20) );

create table YLB_TEST_002
(  ID   NUMBER,  NAME VARCHAR2(20));

//插入数据

sql 复制代码
insert into ylb_test_001 values(1,'Arlene');

insert into ylb_test_001 values(2,'Bobby');

insert into ylb_test_001 values(3,'Tommy');

insert into ylb_test_001 values(4,'Jackey');

insert into ylb_test_002 values(1,'Arlene001');

//执行sql

sql 复制代码
merge into ylb_test_002 a
using ylb_test_001 b
on (a.id=b.id)
when matched then
  update set a.name = b.name
when not matched then
  insert values (b.id,b.name);

结果:

小提示:merge into 目标表 using 源表 on (匹配条件) when matched then 执行update 操作 或 delete操作 when not matched then 执行 insert 操作。

oracle不支持delete操作;

在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已。

源表 匹配条件字段unique

相关推荐
RestCloud6 小时前
借助ETL工具,实现AI智能体+数据的落地
数据仓库·人工智能·sql·etl·etlcloud·数据集成平台·java脚本
小二·7 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手8 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌8 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者9 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余9 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹9 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
AllData公司负责人10 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_9547083110 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全