📅  最后修改于: 2023-12-03 15:07:45.098000             🧑  作者: Mango
Oracle SQL提供了MERGE语句,可以将一个表的数据插入到另一个表中(INSERT)或将一个表的数据更新到另一个表中(UPDATE)。但是,在大多数情况下,我们不想将所有记录都进行更新或插入,我们需要添加条件来实现特定行的更新或插入。
下面是 MERGE 语句的基本语法格式:
MERGE INTO target_table_name
USING source_table_name
ON merge_condition
WHEN MATCHED THEN UPDATE SET update_column_name = update_value
WHEN NOT MATCHED THEN INSERT (column1, column2, ....) VALUES (value1, value2, ....);
这里我们有一个目标表 employees
和一个源表 new_employees
,源表和目标表有相同的列名和列数据类型。
在我们的例子中,我们想要把源表中年龄大于等于30岁的记录插入到目标表中。
我们可以使用以下代码来实现:
MERGE INTO employees e
USING new_employees n
ON (e.employee_id = n.employee_id)
WHEN NOT MATCHED AND n.age >= 30 THEN
INSERT (e.employee_id, e.first_name, e.last_name, e.age)
VALUES (n.employee_id, n.first_name, n.last_name, n.age);
这里:
employees
。new_employees
。e.employee_id = n.employee_id
是合并条件。WHEN NOT MATCHED AND n.age >= 30 THEN
是插入的条件。它指定添加新记录仅当源表中的记录没有匹配到目标表中的记录,且源表的 age
列大于等于30。这里我们有一个目标表 employees
和一个源表 new_employees
,源表和目标表有相同的列名和列数据类型。
在我们的例子中,我们想要更新目标表 employees
中所有源表 new_employees
的记录。更新条件是,源表的记录已经存在于目标表中。
我们可以使用以下代码来实现:
MERGE INTO employees e
USING new_employees n
ON (e.employee_id = n.employee_id)
WHEN MATCHED THEN UPDATE
SET e.first_name = n.first_name,
e.last_name = n.last_name,
e.age = n.age
WHERE e.first_name != n.first_name or e.last_name != n.last_name or e.age != n.age;
这里:
employees
。new_employees
。e.employee_id = n.employee_id
是合并条件WHEN MATCHED THEN UPDATE
指定更新操作仅当源表的记录匹配目标表中的记录时WHERE e.first_name != n.first_name or e.last_name != n.last_name or e.age != n.age
确保只有源表中的记录发生变化才进行更新在Oracle SQL中使用 MERGE 语句,可以轻松将多个表中的数据合并在一起。可以根据需求添加条件,在进行 INSERT 或 UPDATE 操作前筛选所需记录。