深入解析Oracle Merge技术:高效数据合并策略

更新:11-24 民间故事 我要投稿 纠错 投诉

老铁们,大家好,相信还有很多朋友对于深入解析Oracle Merge技术:高效数据合并策略和的相关问题不太懂,没关系,今天就由我来为大家分享分享深入解析Oracle Merge技术:高效数据合并策略以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

通过这种合并,您可以在一条SQL 语句中同时对表执行插入和更新。当然是更新还是插入是根据你指定的条件来决定的。 merge into可以使用B表更新A表数据。如果表A 中不存在,则将表B 中的数据插入到表A 中。 MERGE 命令从一个或多个数据源中选择行来更新或插入到一个或多个表中。

语法如下

MERGE INTO [您的表名称] [在此处重命名您的表]

USING ( [在这里写下您的查询] )[重命名您的查询-sql 并像使用表一样使用]

ON([此处的条件表达式] AND [.].)

WHEN MATHED THEN [在这里你可以执行一些更新sql或其他东西]

当不进行数学计算时[在这里执行其他操作!]

我们先看一个简单的例子来介绍一下merge into的用法

使用newproducts np 合并到产品p (p.product_id=np.product_id)

当匹配时

更新集p.product_name=np.product_name

当不匹配时

插入值(np.product_id、np.product_name、np.category)

在这个例子中。前面的merge into products using newproducts是指使用newproducts表合并到products表中。 merge的匹配关系就是on后面的条件子句的内容。这里是根据两个表的product_id进行匹配,那么我们的操作就匹配成功了。是的,就是whenmatchedthen子句中的动作。这里的操作是update set p.product_name=np.product_name。显然,newproduct中的内容被赋值给product的product_name。如果没有匹配到,就插入类似insert这样的语句。我们看看merge inot的用法是不是一目了然。这里merge的作用就像是比较然后选择更新或者插入。它是一系列的组合。在做merge时,同等情况下,merge的性能要优于相同功能的update/insert语句。曾经有人分析,合并的批处理对性能贡献很大。就我个人而言,我认为这是没有根据的。

我们还可以在using后面使用视图或者子查询。例如,我们将新产品替换为

使用(select * from newproducts) np on (p.product_id=np.product_id) 合并到产品p 中

当匹配时

更新集p.product_name=np.product_name

当不匹配时

插入值(np.product_id、np.product_name、np.category)

这也是有可能的。

MERGE 在Oracle 10g 中有以下改进:

1. UPDATE或INSERT子句是可选的

2. UPDATE和INSERT子句可以与WHERE子句一起添加

3. 在ON 条件中使用常量过滤谓词将所有行插入到目标表中。不需要连接源表和目标表。

4. UPDATE 子句后面可以跟DELETE 子句,以删除一些不必要的行。

下面我们通过例子来一一了解一下以上新特性。

1. UPDATE或INSERT子句是可选的

在9i中,insert into和update都必须存在,即要么是update,要么是insert,不支持单一操作。虽然还能救国,哈哈,有点太强了。在10g中,它是可选的,可以满足我们更多的需求。

例如上面这句话

我们只能有更新或插入

使用newproducts np 合并到产品p (p.product_id=np.product_id)

当匹配时

更新集p.product_name=np.product_name

这里,如果匹配则更新,如果不存在则忽略。

2. UPDATE和INSERT子句可以与WHERE子句一起添加

这也是一个功能上的改进,可以满足我们更多的需求。 where的作用显然是一个过滤条件。我们添加一些附加条件来仅更新和插入满足where 条件的条件。

使用(select * from newproducts) np on (p.product_id=np.product_id) 合并到产品p 中

当匹配时

更新集p.product_name=np.product_name 其中np.product_name like "OL%"

这意味着仅更新product_name 以“OL”开头的匹配产品。如果product_name不是以"OL"开头,它将被匹配并且不会执行任何操作。您还可以添加插入位置。

例如

使用(select * from newproducts) np on (p.product_id=np.product_id) 合并到产品p 中

当匹配时

更新集p.product_name=np.product_name 其中np.product_name like "OL%"

当不匹配时

插入值(np.product_id,np.product_name,np.category),其中np.product_name如"OL"

注意这里的比较。它们返回的结果行数存在差异。

3. 在ON 条件中使用常量过滤谓词将所有行插入到目标表中。不需要连接源表和目标表。

使用(select * from newproducts) np on (1=0) 合并到产品p 中

当匹配时

更新集p.product_name=np.product_name

当不匹配时

插入值(np.product_id、np.product_name、np.category)

个人认为这个功能没有多大意义。我们的insert into本身就支持这样的功能,所以不需要使用merge。

4. UPDATE 子句后面可以跟DELETE 子句,以删除一些不必要的行。

delete只能与update结合使用,删除满足where子句的记录。

使用(select * from newproducts) np on (p.product_id=np.product_id) 合并到产品p 中

当匹配时

更新集p.product_name=np.product_name 删除where p.product_id=np.product_id where np.product_name like "OL%"

当不匹配时

插入值(np.product_id、np.product_name、np.category)

我们这里实现的目标是将匹配记录的prodcut_name更新为product,并删除以OL开头的product_name。

关于深入解析Oracle Merge技术:高效数据合并策略到此分享完毕,希望能帮助到您。

用户评论

几妆痕

学习合并数据真麻烦,Oracle 的命令也太复杂了

    有9位网友表示赞同!

念旧情i

这个版本的新功能终于可以用,以前每次都要 手动合并真是太慢了

    有5位网友表示赞同!

旧爱剩女

Merge 语句确实很强大,可以一次解决很多问题

    有8位网友表示赞同!

岁岁年年

我想试试看能不能用这个106版本的 Merge 提高效率!

    有20位网友表示赞同!

爱你心口难开

Oracle 的 documentation 真的有用,帮我明白了怎么使用 merge 语句了

    有16位网友表示赞同!

半梦半醒半疯癫

在数据更新方面一直遇到麻烦,希望这个 106 版本的 Merge 能帮到我!

    有6位网友表示赞同!

未来未必来

感觉 Oracle 越用越强大,这种功能真的很让人期待

    有17位网友表示赞同!

陌上花

之前还在用旧版本的 Merge 命令,看来要赶紧更新了

    有16位网友表示赞同!

荒野情趣

做Oracle开发真不容易啊,需要一直学习新版本的功能

    有18位网友表示赞同!

歆久

看了下文档,这个 106 版本的 Merge 挺强大的,可以处理多表之间的合并

    有10位网友表示赞同!

那伤。眞美

终于不用为了合并数据写繁琐的 SQL 了!

    有11位网友表示赞同!

她最好i

希望这个更新也能解决我以前遇到的 Merge 错误问题

    有7位网友表示赞同!

孤者何惧

感觉 Oracle 的发展方向越来越好,这种功能太实用啦

    有16位网友表示赞同!

久爱不厌

学习新版本的功能需要花时间,幸好有文档可以参考。

    有11位网友表示赞同!

单身i

期待能用新的 Merge 功能来处理一些复杂的合并场景啊!

    有7位网友表示赞同!

孤败

这个 106 版本的 Oracle 值得一试,它会提高我们的工作效率!

    有6位网友表示赞同!

青墨断笺み

之前在使用旧版本的 Merge 时常常遇到问题,希望新版本能更稳定!

    有20位网友表示赞同!

╯念抹浅笑

Oracle 的 Merge 语句已经很成熟了,但这个新版本肯定还会有一些惊喜!

    有20位网友表示赞同!

余温散尽ぺ

合并数据的技巧很多,这个新的 Merge 函数能否让我学到一些新知识?

    有20位网友表示赞同!

【深入解析Oracle Merge技术:高效数据合并策略】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:从明星恋情分析:两段感情经历中的启示与教训 下一篇:如何将iOS图片压缩到特定尺寸