日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Merge into的使用详解-你Merge了没有

發(fā)布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Merge into的使用详解-你Merge了没有 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Merge是一個非常有用的功能,類似于Mysql里的insert into on duplicate key.?

Oracle在9i引入了merge命令,?
通過這個merge你能夠在一個SQL語句中對一個表同時執(zhí)行inserts和updates操作. 當然是update還是insert是依據(jù)于你的指定的條件判斷的,Merge into可以實現(xiàn)用B表來更新A表數(shù)據(jù),如果A表中沒有,則把B表的數(shù)據(jù)插入A表. MERGE命令從一個或多個數(shù)據(jù)源中選擇行來updating或inserting到一個或多個表?

語法如下?
MERGE INTO [your table-name] [rename your table here]?
USING ( [write your query here] )[rename your query-sql and using just like a table]?
ON ([conditional expression here] AND [...]...)?
WHEN MATHED THEN [here you can execute some update sql or something else ]?
WHEN NOT MATHED THEN [execute something else here ! ]?

我們先看看一個簡單的例子,來介紹一個merge into的用法?
merge into products p using newproducts np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name?
when not matched then?
insert values(np.product_id, np.product_name, np.category)?

在這個例子里。前面的merger into products using newproducts 表示的用newproducts表來merge到products表,merge的匹配關(guān)系就是on后面的條件子句的內(nèi)容,這里根據(jù)兩個表的product_id來進行匹配,那么匹配上了我們的操作是就是when matched then的子句里的動作了,這里的動作是update set p.product_name = np.product_name, 很顯然就是把newproduct里的內(nèi)容,賦值到product的product_name里。如果沒有匹配上則insert這樣的一條語句進去。 大家看看這個merget inot的用法是不是一目了然了呀。這里merger的功能,好比比較,然后選擇更新或者是插入,是一系列的組合拳,在做merge的時候,這樣同樣的情況下,merge的性能是優(yōu)于同等功能的update/insert語句的。有人曾經(jīng)分析merge是批量處理對性能貢獻很大,個人覺得這個是沒有考據(jù)的。?

我們也可以在using后面使用視圖或者子查詢。比如我們把newproducts換成?
merge into products p using (select * from newproducts) np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name?
when not matched then?
insert values(np.product_id, np.product_name, np.category)?
也是可以的。?

在Oracle 10g中MERGE有如下一些改進:?
1、UPDATE或INSERT子句是可選的?
2、UPDATE和INSERT子句可以加WHERE子句?
3、在ON條件中使用常量過濾謂詞來insert所有的行到目標表中,不需要連接源表和目標表?
4、UPDATE子句后面可以跟DELETE子句來去除一些不需要的行?

我們通過實例來一一看看如上的新特性?

1. UPDATE或INSERT子句是可選的?
在9i里由于必須insert into和update都要存在,也就是不是update就是insert,不支持單一的操作,雖然還是可以曲線救國,呵呵 但是有些過于強勢了。而10g里就是可選了,能符合我們更多的需求了?
比如上面的句子?
我們可以只存在update或者insert?
merge into products p using newproducts np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name?
這里,如果匹配就更新,不存在就不管了。?

2. UPDATE和INSERT子句可以加WHERE子句?
這也是一個功能性的改進,能夠符合我們更多的需求,這個where的作用很明顯是一個過濾的條件,是我們加入一些額外的條件,對只對滿足where條件的進行更新和insert?
merge into products p using (select * from newproducts) np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name where np.product_name like 'OL%'?
這里表示只是對product_name開頭是'OL'的匹配上的進行update,如果開頭不是'OL'的就是匹配了也不做什么事情,insert里也可以加入where?
比如?
merge into products p using (select * from newproducts) np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name where np.product_name like 'OL%'?
when not matched then?
insert values(np.product_id, np.product_name, np.category) where np.product_name like 'OL%'?

這里注意比較一下,他們返回的結(jié)果行數(shù),是有著差異的。?

3. 在ON條件中使用常量過濾謂詞來insert所有的行到目標表中,不需要連接源表和目標表?

merge into products p using (select * from newproducts) np on (1=0)?
when matched then?
update set p.product_name = np.product_name?
when not matched then?
insert values(np.product_id, np.product_name, np.category)?
個人覺得這個功能沒有太大的意義,我們的insert into本身就支持這樣的功能,沒有必要使用merge?

4. UPDATE子句后面可以跟DELETE子句來去除一些不需要的行?
delete只能和update配合,從而達到刪除滿足where條件的子句的紀錄?
merge into products p using (select * from newproducts) np on (p.product_id = np.product_id)?
when matched then?
update set p.product_name = np.product_name delete where p.product_id = np.product_id where np.product_name like 'OL%'?
when not matched then?
insert values(np.product_id, np.product_name, np.category)?
這里我們達到的目的就是 會把匹配的記錄的prodcut_name更新到product里,并且把product_name開頭為OL的刪除掉。

merge into也是一個dml語句,和其他的dml語句一樣需要通過rollback和commit 結(jié)束事務(wù)。?

Merge是一個非常強大的功能,而且是我們需求里經(jīng)常會用到的一個有用的功能,所以我們一定要好好的學習到。?

文中需要的測試腳本在附件里提供下載。?
merge into sample.sql

總結(jié)

以上是生活随笔為你收集整理的Merge into的使用详解-你Merge了没有的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费成人av在线播放 | 中国在线观看视频高清免费 | 俄罗斯厕所偷拍 | 成年黄色网 | 久久88| 宅男噜噜噜66一区二区 | 欧美精品成人一区二区在线观看 | 国产网红无码精品视频 | 国产成人久久精品麻豆二区 | 长篇高h乱肉辣文 | 中文字幕无产乱码 | 欧美在线视频第一页 | 另类欧美尿交 | 搡老熟女老女人一区二区 | 国产一二精品 | 人妻少妇被猛烈进入中文字幕 | 黄色精彩视频 | 先锋av资源在线 | 日本一区二区在线播放 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产午夜伦鲁鲁 | 亚洲涩涩 | 日本免费高清视频 | 四虎影院在线观看免费 | 狠狠干2024| 九九色在线| 亚洲国产18| 国产一区二区三区视频在线观看 | 熟睡侵犯の奶水授乳在线 | 中文字幕无码精品亚洲 | jizz内谢中国亚洲jizz | 香蕉视频亚洲一级 | 一级国产片 | 国产精品露脸视频 | 久久国产视频播放 | 日韩在线观看视频一区二区三区 | 国产精品-区区久久久狼 | 国精产品一区一区三区免费视频 | 性色av无码久久一区二区三区 | 一边摸上面一边摸下面 | 香蕉国产在线 | 欧美国产一区二区在线观看 | 在线亚洲一区二区 | 日韩精品一区二区三区在线观看 | 国产午夜精品免费一区二区三区视频 | 日韩精品一区二区在线观看 | 欧美性猛交一区二区三区精品 | 国产精品1页| 久久久久国产精品一区二区 | 朋友人妻少妇精品系列 | 国产精品免费视频一区二区三区 | 色999在线观看 | 亚洲精品一区二区在线观看 | 日日碰日日摸 | 最新中文字幕一区 | 久久国产电影 | 日本高清不卡二区 | 天天草天天草 | 日韩一区二区三区精品视频 | www.狠狠艹 | 影音先锋久久 | 欧美日韩成人免费 | 999国产在线 | 欧美精品一区二区三区在线 | 超碰伊人网 | 日本不卡一区二区在线观看 | 亚洲av无码国产精品永久一区 | 久久aⅴ乱码一区二区三区 亚洲成人18 | 香蕉污视频在线观看 | 九九碰 | 四虎精品永久在线 | 日本国产在线视频 | 日韩成年人视频 | 亚洲人人在线 | 性生交大片免费看女人按摩 | 黄色高清网站 | 亚洲天堂99 | 强伦人妻一区二区三区视频18 | 亚洲最大色网站 | 国产精品骚 | 女性裸体无遮挡胸 | 麻豆国产精品视频 | 三级黄色免费 | 成人激情四射网 | 91久久伊人| 国产伦精品一区二区免费 | 97xxxxx| 精品人妻一区二区三区日产 | 99ri视频| 欧美人与性动交α欧美片 | 少妇极品熟妇人妻无码 | 日韩一区欧美一区 | 色亭亭| 丁香六月婷婷综合 | 777精品| 国产哺乳奶水91在线播放 | 欧美成人视 | 天天操人人爽 | 国产乱妇乱子 |