`

深入sql之merge into

阅读更多

http://nodonkey.iteye.com/blog/312528

关键字: sql, merge into

转自 逆水流沙 http://hi.baidu.com/wenjp

 

用途
merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。

该语句可以在同一语句中执行两步操作,可以减少执行多条insert 和update语句。

merge是一个确定性的语句,即不会在同一条merge语句中去对同一条记录多次做修改操作。

语法


其中,merge_insert_clause::=


关键字、参数

into 子句

在into子句中指定所要修改或者插入数据的目标表

using 子句
在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。

on 子句
在on子句中指定执行插入或者修改的满足条件。在目标表中符合条件的每一行,oracle用数据源中的相应数据修改这些行。对于不满足条件的那些行,oracle则插入数据源中相应数据。

when matched | not matched
用该子句通知oracle如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。

merge_update子句
merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。

限制:当修改一个视图时,不能指定一个default值

merge_insert 子句
merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。

限制:当修改一个视图时,不能指定一个default值

范例
merge 范例
下面的例子在oe模式下创建一个bonuses表,bonus的缺省值为100。然后插入bonuses表所有有成绩的销售人员(基于oe_orders 表的sqles_rep_id字段)。最后,人力资源管理人员决定,所有的人员将得到分红。没有销售成绩的员工得到工资的1%的分红,而那些有销售成绩的员工将得到缺省分红以及工资的1%。可以用一条merge语句将完成上述修改:

create table bonuses (employee_id number, bonus number default 100);


insert into bonuses(employee_id)

(select e.employee_id from employees e, orders o

where e.employee_id = o.sales_rep_id

group by e.employee_id);


select * from bonuses;


employee_id bonus

----------- ----------

153 100

154 100

155 100

156 100

158 100

159 100

160 100

161 100

163 100


merge into bonuses d

using (select employee_id, salary, department_id from employees

where department_id = 80) s

on (d.employee_id = s.employee_id)

when matched then update set d.bonus = d.bonus + s.salary*.01

when not matched then insert (d.employee_id, d.bonus)

values (s.employee_id, s.salary*0.01);


employee_id bonus

----------- ----------

153 180

154 175

155 170

156 200

158 190

159 180

160 175

161 170

163 195

157 95

145 14

170 96

179 62

152 90

169 100

分享到:
评论
1 楼 venn 2010-04-12  
不错,merge 语句在有些地方比较实用,先收藏下了

相关推荐

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Merge into的使用详解

    在SQL语言中,`MERGE INTO`语句是一种强大的工具,用于合并两个数据集,它允许根据特定条件将数据从一个源(通常是临时表或视图)插入或更新到目标表。这个操作通常被称为“合并”或“ Upsert”,因为它可以实现插入...

    Oracle中merge into的使用

    通过`MERGE INTO`,我们可以更加灵活地管理数据库中的数据,无论是更新已有记录,还是插入新记录,甚至删除不符合条件的记录,都可以在一个SQL语句中完成,极大地简化了编程逻辑,提高了代码的可读性和执行效率。...

    oracle merge into的使用

    描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为灵活和高效的数据管理方式。在...

    Merge Into 语句代替InsertUpdate

    非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者

    0709-动态SQL-merge-into.sql

    0709-动态SQL-merge-into.sql

    使用BULK COLLECT, MERGE 语句提高sql执行效率

    详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询

    SQLServer中merge函数用法详解

    在本文中,我们将深入探讨`Merge`函数的使用方法和注意事项。 `Merge`语句的基本结构如下: ```sql MERGE TargetTable AS T USING SourceTable AS S ON (MatchingCondition) WHEN MATCHED AND ...

    利用 sqluldr2导出数据 使用sqlldr导入数据 通过merge into 合并更新数据

    下面将详细阐述如何使用这两个工具以及如何通过`MERGE INTO`语句进行数据合并更新。 1. SQLULDR2导出数据: SQLULDR2是Oracle提供的一款数据导出工具,它能够快速地将数据库中的数据导出到文本文件或其他格式的...

    SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题

    在SQL Server中,`MERGE`语句是一种强大的工具,用于合并两个数据集,它可以实现插入、更新或删除操作。然而,当源表数据集为空时,`MERGE`语句可能不会按照预期的方式工作。这个问题在【标题】和【描述】中已经提到...

    pybigquery-merge-into:向pybigquery添加MERGE INTO支持

    主要类是pybigquery_merge_into.merge_clause.MergeInto() 。 例子 >> > query = MergeInto ( target = target , source = source , onclause = target . c . t1 == source . c . s1 , when_clauses = [ ...

    1110-MERGE-INTO.~sql

    1110-MERGE-INTO.~sql

    oracle中merge into用法及实例解析

    Oracle中的`MERGE INTO`语句是一种强大的工具,用于整合数据操作,如更新、插入和删除,基于两个数据源的匹配条件。这个语句在处理数据仓库、数据同步或者复杂业务逻辑时非常有用。让我们详细了解一下`MERGE INTO`的...

    Merge-Sql.zip

    MERGE INTO 目标表 USING 源表 ON (条件) WHEN MATCHED THEN UPDATE SET 字段 = 新值 WHEN NOT MATCHED THEN INSERT (字段列表) VALUES (值列表); ``` 在支持MERGE的数据库系统(如Oracle、SQL Server、...

    oracle Merge 函数.doc

    MERGE INTO merge_test2 M USING merge_test1 N ON (M.a = N.a) WHEN MATCHED THEN UPDATE SET M.b = N.b WHEN NOT MATCHED THEN INSERT (M.a, M.b) VALUES (N.a, N.b); SELECT * FROM merge_test2; ``` Merge ...

    SQL Server Merger实现数据的同步

    本文旨在介绍一种更为简便的方法——利用SQL Server 2008新增的`MERGE`语句来实现数据同步与合并。 #### Merge语法介绍 在SQL Server 2008及更高版本中引入了`MERGE`语句,这一功能允许用户在一个语句中根据源表与...

    oracle死锁原因解决办法

    在Oracle数据库中,锁是用于控制并发访问的关键机制之一。当两个或多个事务请求锁定同一资源时,如果没有合理的锁管理策略,就可能导致死锁。例如,如果事务A已经锁定了资源X,并尝试获取对资源Y的锁定;与此同时,...

    SQLServer 2008 Merge语句的OUTPUT功能

    在SQL Server 2008中,`MERGE`语句是一种非常强大的工具,它能够合并插入、更新和删除操作于一个单一的SQL语句之中,极大地提高了数据处理的效率和代码的简洁性。`OUTPUT`子句是`MERGE`语句的一个重要组成部分,它...

Global site tag (gtag.js) - Google Analytics