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

相关推荐
夜泉_ly20 分钟前
MySQL -安装与初识
数据库·mysql
qq_529835351 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New4 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6754 小时前
数据库基础1
数据库
我爱松子鱼4 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser5 小时前
【SQL】多表查询案例
数据库·sql
Galeoto5 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231116 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql