資源描述:
《merge into 詳細(xì)介紹》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Mergeinto詳細(xì)介紹/*Mergeinto詳細(xì)介紹MERGE語(yǔ)句是Oracle9i新增的語(yǔ)法,用來(lái)合并UPDATE和INSERT語(yǔ)句。通過(guò)MERGE語(yǔ)句,根據(jù)一張表或子查詢(xún)的連接條件對(duì)另外一張表進(jìn)行查詢(xún),連接條件匹配上的進(jìn)行UPDATE,無(wú)法匹配的執(zhí)行INSERT。這個(gè)語(yǔ)法僅需要一次全表掃描就完成了全部工作,執(zhí)行效率要高于INSERT+UPDATE。*//*語(yǔ)法:MERGE[INTO[schema.]table[t_alias]USING[schema.]{table
2、view
3、subquery}[t_alias]ON(condition)WHENMATCHED
4、THENmerge_update_clauseWHENNOTMATCHEDTHENmerge_insert_clause;*//*我們還是以《sql中的case應(yīng)用》中的表為例。在創(chuàng)建另兩個(gè)表fzq1和fzq2*/--全部男生記錄createtablefzq1asselect*fromfzqwheresex=1;--全部女生記錄createtablefzq2asselect*fromfzqwheresex=0;/*涉及到兩個(gè)表關(guān)聯(lián)的例子*/--更新表fzq1使得id相同的記錄中chengji字段+1,并且更新name字段。--如果id不相同,則插入到表fzq1中.--
5、將fzq1表中男生記錄的成績(jī)+1,女生插入到表fzq1中mergeintofzq1aa????--fzq1表是需要更新的表usingfzqbb???????????--關(guān)聯(lián)表on(aa.id=bb.id)???????--關(guān)聯(lián)條件whenmatchedthen??????--匹配關(guān)聯(lián)條件,作更新處理updatesetaa.chengji=bb.chengji+1,aa.name=bb.name????????--此處只是說(shuō)明可以同時(shí)更新多個(gè)字段。whennotmatchedthen???--不匹配關(guān)聯(lián)條件,作插入處理。如果只是作更新,下面的語(yǔ)句可以省略。insertv
6、alues(bb.id,bb.name,bb.sex,bb.kecheng,bb.chengji);--可以自行查詢(xún)fzq1表。/*涉及到多個(gè)表關(guān)聯(lián)的例子,我們以三個(gè)表為例,只是作更新處理,不做插入處理。當(dāng)然也可以只做插入處理*/--將fzq1表中女生記錄的成績(jī)+1,沒(méi)有直接去sex字段。而是fzq和fzq2關(guān)聯(lián)。mergeintofzq1aa????--fzq1表是需要更新的表using(selectfzq.id,fzq.chengji??????fromfzqjoinfzq2??????onfzq.id=fzq2.id)bb--數(shù)據(jù)集on(aa.id=bb.id)
7、???????--關(guān)聯(lián)條件whenmatchedthen??????--匹配關(guān)聯(lián)條件,作更新處理updatesetaa.chengji=bb.chengji+1--可以自行查詢(xún)fzq1表。/*不能做的事情*/mergeintofzq1aa???usingfzqbb??????????on(aa.id=bb.id)???????whenmatchedthen??????updatesetaa.id=bb.id+1/*系統(tǒng)提示:ORA-38104:ColumnsreferencedintheONClausecannotbeupdated:"AA"."ID"我們不能更新on
8、(aa.id=bb.id)關(guān)聯(lián)條件中的字段*/updatefzq1setid=(selectid+1fromfzqwherefzq.id=fzq1.id)whereidin(selectidfromfzq)--使用update就可以更新,如果有更好的方法,謝謝反饋!fromthis:http://hi.baidu.com/rhuang666/blog/item/09bae812ce7a752add540120.htmlOracle9i引入了MERGE命令,你能夠在一個(gè)SQL語(yǔ)句中對(duì)一個(gè)表同時(shí)執(zhí)行inserts和updates操作.MERGE命令從一個(gè)或多個(gè)數(shù)據(jù)源中選擇
9、行來(lái)updating或inserting到一個(gè)或多個(gè)表.Oracle10g中MERGE有如下一些改進(jìn):1、UPDATE或INSERT子句是可選的2、UPDATE和INSERT子句可以加WHERE子句3、ON條件中使用常量過(guò)濾謂詞來(lái)insert所有的行到目標(biāo)表中,不需要連接源表和目標(biāo)表4、UPDATE子句后面可以跟DELETE子句來(lái)去除一些不需要的行?首先創(chuàng)建示例表:createtablePRODUCTS???(???PRODUCT_IDINTEGER,???PRODUCT_NAMEVARCHAR2(60),???CATEGORYVARCHAR2(60