目录
1:概念
MERGE INTO
是一种用于在数据库表中执行插入、更新和删除操作的SQL语句。它通常用于根据条件来确定应该执行何种操作,以确保目标表中的数据与源数据同步。
2:语法结构
2.1:既更新又插入
MERGR INTO 目标表
USING 来源表
ON (关联条件)
WHEN MATCHED THEN -- 关联上的内容
UPDATE
SET 目标表.列 = 来源表.列 ,目标表.列 = 来源表.列 ............
WHEN NOT MATCHED THEN
INSERT (目标表.列,目标表.列,目标表.列 ...........)
VALUES (来源表.列,来源表.列, 来源表.列 ...........);
2.2:既更新又删除
MERGE INTO target_table AS 目标表
USING source_table AS 来源表
ON (关联条件)
WHEN MATCHED THEN
-- Update statement
WHEN NOT MATCHED BY SOURCE THEN
-- Delete statement;
3:简单使用
示例1:(既更新又插入)
假设我们有两个表:source_data
和 target_data
,它们的结构如下
CREATE TABLE source_data (
id INT PRIMARY KEY,
value VARCHAR(50)
);
CREATE TABLE target_data (
id INT PRIMARY KEY,
value VARCHAR(50)
);
现在,我们想要使用
MERGE INTO
语句将source_data
表的数据合并到target_data
表中。如果在target_data
表中找到与source_data
表中相同的id
值,就执行更新操作;如果在target_data
表中找不到相同的id
值,就执行插入操作。
以下是 MERGE INTO
语句的示例:
MERGE INTO target_data AS t
USING source_data AS s
ON (t.id = s.id)
WHEN MATCHED THEN
UPDATE SET t.value = s.value
WHEN NOT MATCHED THEN
INSERT (id, value) VALUES (s.id, s.value);
这个 MERGE INTO
语句的含义如下:
MERGE INTO target_data AS t
:指定要合并数据的目标表,使用别名t
。USING source_data AS s
:指定要合并数据的源表,使用别名s
。ON (t.id = s.id)
:定义了合并条件,如果目标表的id
列与源表的id
列匹配,就执行合并操作。WHEN MATCHED THEN UPDATE SET t.value = s.value
:当条件匹配时,更新目标表的value
列为源表的value
列。WHEN NOT MATCHED THEN INSERT (id, value) VALUES (s.id, s.value)
:当条件不匹配时,将源表的数据插入到目标表。
这个 MERGE INTO
语句会根据合并条件来执行不同的操作,确保 target_data
表中的数据与 source_data
表中的数据同步。
示例2:(既更新又删除)
当你想在一个SQL语句中同时执行删除和更新操作时,使用
MERGE INTO
可以非常有用。以下是一个示例,假设有两个表:target_table
和source_table
,我们要合并这两个表的数据,同时进行更新和删除操作。
假设我们有以下两个表的结构:
-- 目标表 target_table
CREATE TABLE target_table (
id INT PRIMARY KEY,
name VARCHAR(50),
salary INT
);
-- 源表 source_table
CREATE TABLE source_table (
id INT PRIMARY KEY,
name VARCHAR(50),
salary INT
);
下面是一个使用MERGE INTO
同时执行更新和删除操作的SQL示例:
MERGE INTO target_table AS target
USING source_table AS source
ON (target.id = source.id)
WHEN MATCHED THEN
UPDATE SET target.name = source.name, target.salary = source.salary
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
这个 MERGE INTO
语句的含义如下:
-
MERGE INTO target_table AS target
:指定要合并数据的目标表target_table
,并为其指定别名target
。 -
USING source_table AS source
:指定提供数据的源表source_table
,并为其指定别名source
。 -
ON (target.id = source.id)
:定义用于匹配目标表和源表的条件,这里是id
列匹配。 -
WHEN MATCHED THEN
:当条件匹配时执行的操作,这里是更新操作,将目标表的name
和salary
列更新为源表的对应值。 -
WHEN NOT MATCHED BY SOURCE THEN
:当源表中没有匹配的记录时执行的操作,这里是删除操作,删除目标表中的记录。
这个SQL语句将确保目标表中的数据与源表同步,执行更新和删除操作以匹配源数据。