SQL MERGE语句

SQL MERGE 语句学习笔记

MERGE 语句是 SQL 中用于将两个表的数据合并的强大工具。它可以根据条件执行更新、插入或删除操作。

1. MERGE 语句的基本语法

语法:

1
2
3
4
5
6
7
MERGE INTO 目标表
USING 源表
ON (匹配条件)
WHEN MATCHED THEN
UPDATE SET1 =1, 列2 =2, ...
WHEN NOT MATCHED THEN
INSERT (列1, 列2, ...) VALUES (值1, 值2, ...);

说明:

  • 目标表:需要更新或插入数据的表。
  • 源表:提供数据的表。
  • 匹配条件:用于确定目标表和源表中的匹配行。
  • WHEN MATCHED:如果匹配成功,则执行更新操作。
  • WHEN NOT MATCHED:如果匹配失败,则执行插入操作。

2. MERGE 语句的示例

(1)创建副本表

1
2
3
4
5
6
7
8
-- 创建副本表 myemp
CREATE TABLE myemp AS
SELECT empno, ename, sal, deptno
FROM tmp_emp
WHERE empno IN (7369, 7499, 7521);

-- 查询 myemp 表
SELECT * FROM myemp;

(2)修改 myemp 表数据

1
2
3
4
5
6
-- 修改 myemp 表数据
UPDATE myemp SET ename = 'hello' WHERE empno = 7369;
UPDATE myemp SET ename = 'oracle' WHERE empno = 7521;

-- 查询修改后的 myemp 表
SELECT * FROM myemp;

(3)使用 MERGE 同步数据

1
2
3
4
5
6
7
8
9
10
11
-- 使用 MERGE 同步数据
MERGE INTO myemp m
USING tmp_emp t
ON (m.empno = t.empno)
WHEN MATCHED THEN
UPDATE SET m.ename = t.ename
WHEN NOT MATCHED THEN
INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno);

-- 查询同步后的 myemp 表
SELECT * FROM myemp;

3. 带条件的 MERGE 语句

(1)更新特定条件的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 修改 myemp 表数据
UPDATE myemp SET sal = 999 WHERE ename = 'SMITH';

-- 查询原始表 10 部门的数据
SELECT * FROM tmp_emp WHERE deptno = 10;

-- 查询 myemp 表
SELECT * FROM myemp;

-- 使用 MERGE 同步数据(带条件)
MERGE INTO myemp m
USING tmp_emp t
ON (m.empno = t.empno)
WHEN MATCHED THEN
UPDATE SET m.sal = t.sal WHERE m.ename = 'SMITH'
WHEN NOT MATCHED THEN
INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno)
WHERE t.deptno = 10;

-- 查询同步后的 myemp 表
SELECT * FROM myemp;

(2)更新后删除数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 修改目标表 KING 员工编号
UPDATE myemp SET empno = 9999 WHERE ename = 'KING';

-- 修改目标表 SMITH 工资
UPDATE myemp SET sal = 999 WHERE ename = 'SMITH';

-- 查询 myemp 表
SELECT * FROM myemp;

-- 使用 MERGE 同步数据(带删除条件)
MERGE INTO myemp m
USING tmp_emp t
ON (m.empno = t.empno)
WHEN MATCHED THEN
UPDATE SET m.sal = t.sal
DELETE WHERE m.deptno = 10
WHEN NOT MATCHED THEN
INSERT (empno, ename, sal, deptno) VALUES (t.empno, t.ename, t.sal, t.deptno)
WHERE t.deptno IN (20, 30);

-- 查询同步后的 myemp 表
SELECT * FROM myemp;

4. MERGE 语句的注意事项

  1. 匹配条件

    • 匹配条件必须能够唯一标识目标表和源表中的行。
    • 如果匹配条件不唯一,可能会导致意外的更新或插入。
  2. 更新和插入的顺序

    • MERGE 语句会先执行更新操作,再执行插入操作。
  3. 删除操作

    • 删除操作只能与更新操作一起使用。
    • 删除条件必须同时满足匹配条件和删除条件。

5. 总结

  1. MERGE 语句的基本语法:用于将两个表的数据合并。
  2. 带条件的 MERGE 语句:根据条件执行更新、插入或删除操作。
  3. MERGE 语句的注意事项:匹配条件、更新和插入的顺序、删除操作的使用。

SQL MERGE语句
https://blog.pangcy.cn/2018/09/14/数据库相关/Oracle/SQL 语法/SQL MERGE语句/
作者
子洋
发布于
2018年9月14日
许可协议