資源描述:
《update、select使用方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Update、select使用方法最常用的update語法是:UPDATESET=,SET=如果我的更新值Value是從一條select語句拿出來,而且有很多列的話,用這種語法就很麻煩第一,要select出來放在臨時(shí)變量上,有很多個(gè)哦第二,再將變量進(jìn)行賦值。列多起來非常麻煩,能不能像Insert那樣,把整個(gè)Select語句的結(jié)果進(jìn)行插入呢?就好象下面insertintotable1(c1,c2,c3)(selectv1,v2,v3fromtable2)答案是可以
2、的,具體的語法如下:UPDATESET(,)=(SELECT(,)FROMWHERE=)WHERE;?下面是這樣一個(gè)例子:兩個(gè)表a、b,想使b中的memo字段值等于a表中對(duì)應(yīng)id的name值表a:id,name1王2李3張表b:id,ClientName????????
3、?123(MSSQLServer)語句:updateb??set??ClientName???=a.name???froma,b???wherea.id=b.id??(Oralce)語句:updateb??set??(ClientName)???=??(SELECTnameFROMaWHEREb.id=a.id)updatesetfrom語句格式當(dāng)where和set都需要關(guān)聯(lián)一個(gè)表進(jìn)行查詢時(shí),整個(gè)update執(zhí)行時(shí),就需要對(duì)被關(guān)聯(lián)的表進(jìn)行兩次掃描,顯然效率比較低。對(duì)于這種情況,Sybase和SQLSERVER的解決辦法是使用UPDATE...SET...FROM...
4、WHERE...的語法,實(shí)際上就是從源表獲取更新數(shù)據(jù)。在SQL中,表連接(leftjoin、rightjoin、innerjoin等)常常用于select語句,其實(shí)在SQL語法中,這些連接也是可以用于update和delete語句的,在這些語句中使用join還常常得到事半功倍的效果。UpdateT_OrderFormSETT_OrderForm.SellerID=B.L_TUserIDFROMT_OrderFormALEFTJOINT_ProductInfo??BONB.L_ID=A.ProductID用來同步兩個(gè)表的數(shù)據(jù)!Oralce和DB2都支持的語法:UPDAT
5、EASET(A1,A2,A3)=(SELECTB1,B2,B3FROMBWHEREA.ID=B.ID)MSSQLServer不支持這樣的語法,相對(duì)應(yīng)的寫法為:UPDATEA??SETA1=B1,A2=B2,A3=B3??FROMALEFTJOINBONA.ID=B.ID個(gè)人感覺MSSQLServer的Update語法功能更為強(qiáng)大。MSSQLSERVER的寫法:UPDATEASETA1=B1,A2=B2,A3=B3FROMA,BWHEREA.ID=B.ID在Oracle和DB2中的寫法就比較麻煩了,如下:UPDATEASET(A1,A2,A3)=(SELECTB1,B2
6、,B3FROMBWHEREA.ID=B.ID)WHEREIDIN(SELECTB.IDFROMBWHEREA.ID=B.ID)例子表A代碼值1張三2李四3王五表B代碼值234更新表B的值,用表A的值,條件是表B的代碼=表A的表碼updateBbsetb.值=(selecta.值fromAawherea.代碼=b.代碼)如果A表沒有的,B表這個(gè)字段的值就為空了,后面加個(gè)什么條件,A表沒有的,B表不變呢updateBbsetb.值=(selecta.值fromAawherea.代碼=b.代碼)whereb.代碼in(selecta.代碼fromAa)或updateBbse
7、tb.值=(selecta.值fromAawherea.代碼=b.代碼)whereb.代碼in(selecta.代碼fromAainnerjoinBbona.代碼=b.代碼)