105 oracle中merge into語(yǔ)句詳解

merge into 語(yǔ)句是insert 與update語(yǔ)句的結(jié)合需频,可以同時(shí)實(shí)現(xiàn)update和insert的功能漓帅。

一眷茁、merge into語(yǔ)句的語(yǔ)法炕泳。

? ?? 1)、 MERGE INTO schema. table alias

????????????????USING { schema. table | views | query} alias ? ON {(condition) } ? ?

????????????????WHEN MATCHED THEN ? UPDATE SET {clause}?

????????????????WHEN NOT MATCHED THEN ? ? INSERT VALUES {clause};

? ? 2)上祈、--解析

????????????????INTO 子句------>用于指定你所update或者Insert目的表培遵。

?????????????? USING 子句------->用于指定你要update或者Insert的記錄的來(lái)源浙芙,它可能是一個(gè)表,視圖籽腕,子查詢嗡呼。

????????????? ON? ----->用于目的表和源表(視圖,子查詢)的關(guān)聯(lián)皇耗,如果匹配(或存在)南窗,則更新,否則插入郎楼。

?????????????? update? set? ------>用于寫update語(yǔ)句

?????????????? insert? ----->用于插入目標(biāo)表沒有的數(shù)據(jù)

二万伤、merge 語(yǔ)句的各種用法練習(xí)

? ? ? ?? 1)、創(chuàng)建表aa

????????????????create table t_B_info_aa

????????????????????????????????????????( id varchar2(20),

??????????????????????????????????????????name varchar2(50),

????????????????????????????????????????? type varchar2(30),

????????????????????????????????????????? price number

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? );

? ? ?? 2)箭启、向a表插入記錄

????????????insert into t_B_info_aa values('01','冰箱','家電',2000);

????????????insert into t_B_info_aa values('02','洗衣機(jī)','家電',1500);

????????????insert into t_B_info_aa values('03','熱水器','家電',1000);

????????????insert into t_B_info_aa values('04','凈水機(jī)','家電',1450);

????????????insert into t_B_info_aa values('05','燃?xì)庠?,'家電',800);

????????????insert into t_B_info_aa values('06','太陽(yáng)能','家電',1200);

????????????insert into t_B_info_aa values('07','西紅柿','食品',1.5);

????????????insert into t_B_info_aa values('08','黃瓜','食品',3);

????????????insert into t_B_info_aa values('09','菠菜','食品',4);

? ? ? ? ? ? insert into t_B_info_aa values('10','香菇','食品',9);

????????????insert into t_B_info_aa values('11','韭菜','食品',2);

????????????insert into t_B_info_aa values('12','白菜','食品',1.2);

????????????insert into t_B_info_aa values('13','芹菜','食品',2.1);

????3)壕翩、創(chuàng)建表b

????????????create table t_B_info_bb

????????????????????????????????????????????????( id varchar2(20),

????????????????????????????????????????????????? type varchar2(50),

????????????????????????????????????????????????? price number

????4)、 向bb插入數(shù)據(jù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? );

????????????insert into t_B_info_bb values('01','家電',2000);

????????????insert into t_B_info_bb values('02','家電',1000);

?? 5) 傅寡、update和insert同時(shí)使用

????????????merge into t_B_info_bb b

????????????using t_B_info_aa a --如果是子查詢要用括號(hào)括起來(lái)

????????????on (a.id = b.id and a.type = b.type) --關(guān)聯(lián)條件要用括號(hào)括起來(lái)

????????????when matched then

? ? ? ? ?? update? set b.price = a.price --update 后面直接跟set語(yǔ)句

? ? ? ? ?? when not matched then

? ? ? ? ? insert (id, type, price) values (a.id, a.type, a.price) --insert 后面不加into

---這條語(yǔ)句根據(jù)t_B_info_aa 更新了t_B_info_bb中的一條記錄放妈,插入了11條記錄

?? 6)、只插入不更新

????????--處理表中數(shù)據(jù)荐操,使表中的一條數(shù)據(jù)發(fā)生變化芜抒,刪掉一部分?jǐn)?shù)據(jù)。用來(lái)驗(yàn)證只插入不更新的功能

????????update t_B_info_bb b set b.price=1000 where b.id='02';

? ? ? ? delete from t_B_info_bb b where b.type='食品';

????????--只是去掉了when matched then update語(yǔ)句

????????merge into t_B_info_bb b

????????using t_B_info_aa a

????????on (a.id = b.id and a.type = b.type)

????????when not matched then

????????? insert (id, type, price) values (a.id, a.type, a.price)

? 7)托启、只更新不插入

????????--處理表中數(shù)據(jù)宅倒,刪掉一部分?jǐn)?shù)據(jù),用來(lái)驗(yàn)證只更新不插入

????????delete from t_B_info_bb b where b.type='食品';

????????--只更新不插入屯耸,只是去掉了when not matched then insert語(yǔ)句

????????merge into t_B_info_bb b

????????using t_B_info_aa a

????????on (a.id = b.id and a.type = b.type)

????????when matched then

?????????? update set b.price = a.price

三拐迁、加入限制條件的操作

?????????? update t_B_info_bb b

???????????set b.price = 1000

???????????where b.id='02'

?????????? delete from t_b_info_bb b where b.id not in ('01','02') and b.type='家電'

?????????? update t_B_info_bb b

???????????set b.price = 8

?????????? where b.id='10'

???????????delete from t_b_info_bb b where b.id? in ('11','12','13') and b.type='食品'

表中數(shù)據(jù)

執(zhí)行merge語(yǔ)句:腳本一和腳本二執(zhí)行結(jié)果相同

腳本一: merge into t_B_info_bb b

???????? using t_B_info_aa a

???????? on (a.id = b.id and a.type = b.type)

???????? when matched then

? ? ? update set b.price = a.price where a.type = '家電'

???????? when not matched then

?????????? insert

? ? ? ? (id, type, price)

? ? ? values

? ? ? ? (a.id, a.type, a.price) where a.type = '家電';

? 腳本二:? merge into t_B_info_bb b

? ? using (select a.id, a.type, a.price

? ? ? ? ? ? ? from t_B_info_aa a

? ? ? ? ? ?? where a.type = '家電') a

???????????? on (a.id = b.id and a.type = b.type)

???????????? when matched then

???????????update set b.price = a.price

? ? ? ? ?? when not matched then

?????????? insert (id, type, price) values (a.id, a.type, a.price);

結(jié)果:

上面兩個(gè)語(yǔ)句是只對(duì)類型是家電的語(yǔ)句進(jìn)行插入和更新

而腳本三是只對(duì)家電進(jìn)行更新,其余的全部進(jìn)行插入

? ? merge into t_B_info_bb b

? ? using t_B_info_aa a

? ? on (a.id = b.id and a.type = b.type)

? ? when matched then

? ? ? update set b.price = a.price

? ? ? ? where a.type = '家電'

? ? when not matched then

? ? ? insert

? ? ? ? (id, type, price)

? ? ? values

? ? ? ? (a.id, a.type, a.price);

四疗绣、加刪除操作

update子句后面可以跟delete子句來(lái)去掉一些不需要的行

delete只能和update配合线召,從而達(dá)到刪除滿足where條件的子句的記錄

例句:

? ? merge into t_B_info_bb b

? ? using t_B_info_aa a

? ? on (a.id=b.id and a.type = b.type)

? ? when matched then

?? update set b.price=a.price

?? delete where (a.type='食品')

? ? when not matched then

?? insert values (a.id, a.type, a.price) where a.id = '10'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市多矮,隨后出現(xiàn)的幾起案子缓淹,更是在濱河造成了極大的恐慌,老刑警劉巖塔逃,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯壶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡湾盗,警方通過(guò)查閱死者的電腦和手機(jī)伏蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)格粪,“玉大人躏吊,你說(shuō)我怎么就攤上這事肺孵。” “怎么了颜阐?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵平窘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我凳怨,道長(zhǎng)瑰艘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任肤舞,我火速辦了婚禮紫新,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘李剖。我一直安慰自己芒率,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布篙顺。 她就那樣靜靜地躺著偶芍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪德玫。 梳的紋絲不亂的頭發(fā)上匪蟀,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音宰僧,去河邊找鬼材彪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琴儿,可吹牛的內(nèi)容都是我干的段化。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼造成,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼显熏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谜疤,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤佃延,失蹤者是張志新(化名)和其女友劉穎现诀,沒想到半個(gè)月后夷磕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔沿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年坐桩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片封锉。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绵跷,死狀恐怖膘螟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碾局,我是刑警寧澤荆残,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站净当,受9級(jí)特大地震影響内斯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜像啼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一俘闯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忽冻,春花似錦真朗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至湖笨,卻和暖如春蹭睡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赶么。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工肩豁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辫呻。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓清钥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親放闺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祟昭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361