自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Sybase ASE V15.7新版本支持MERGE語(yǔ)句

數(shù)據(jù)庫(kù)
Sybase ASE V15.7新版本將會(huì)在9月份發(fā)布,新版本將支持MERGE語(yǔ)句。本文我們簡(jiǎn)單介紹了幾個(gè)MERGE的小例子,并對(duì)其進(jìn)行了分析,希望能夠?qū)δ兴鶐椭?/div>

2011年9月,Sybase公司將發(fā)布ASE的下一個(gè)版本V15.7。即將推出的 ASE V15.7中增加了很多的新特性。本文我們只介紹一下MERGE特性的使用,希望能夠?qū)δ兴鶐椭?/p>

ANSI- SQL2003標(biāo)準(zhǔn)中***提到了MERGE這個(gè)命令,簡(jiǎn)單理解為:”向目標(biāo)表中插入不存在的記錄,更新已經(jīng)存在的數(shù)據(jù)“。其它數(shù)據(jù)庫(kù)管理系統(tǒng),比如 Oracle在9i中就引入了MERGE命令,Sybase SQL Anywhere中也有該命令。迄今為止,Sybase ASE中只能使用類(lèi)似的if update else insert的方法來(lái)實(shí)現(xiàn)MERGE的功能。

下面是一個(gè)使用MERGE的例子。表Customers中存儲(chǔ)客戶(hù)信息,每周需要將表Cust_updates_week_10中的數(shù)據(jù)更新到客戶(hù)表Customers中。為了簡(jiǎn)化起見(jiàn),本例子只更新address和number這2個(gè)字段。

 

  1. merge into Customers as c                                        
  2. using Cust_updates_week_10 as u                                  
  3. on c.CustID = u.CustID                                           
  4. when not matched then                                            
  5. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone)  
  6. when matched then                                                
  7. update set Addr=u.Addr, Phone=u.Phone   

 

讓我們來(lái)分析一下上面的這個(gè)SQL語(yǔ)句。

第1行merge into Customers as c表示Customers為目的表。

第2行using Cust_updates_week_10 as u表示Cust_updates_week_10為源數(shù)據(jù)表,被插入或更新的內(nèi)容將來(lái)源于此表。

第3行指定數(shù)據(jù)行是否存在的條件,本例子為演示起見(jiàn),僅指定了一個(gè)條件。on c.CustID = u.CustID將使得ASE語(yǔ)法解釋器對(duì)Customers和Cust_updates_week_10做左外連接處理。

第4-5行表示Cust_updates_week_10包含的并且在Customers中不存在的數(shù)據(jù),也就是“新客戶(hù)”數(shù)據(jù),將被插入到表Customers中。

第6行表示兩張表中的記錄匹配時(shí),“非鍵”列可以被更新。本例子僅更新address和phone兩個(gè)字段。

我們可以拓展MERGE命令的語(yǔ)法,比如:可以使用多個(gè)“當(dāng)存在時(shí)”、“當(dāng)不存在時(shí)”這樣的語(yǔ)句。下面的例子將使用兩個(gè)“when matched”語(yǔ)句,***個(gè)“when matched”語(yǔ)句判斷存在的記錄中address字段是否為空,當(dāng)address為空,記錄將被刪除。

 

  1. merge into Customers as c  
  2. using Cust_updates_week_10 as u  
  3. on c.CustID = u.CustID  
  4. when not matched then  
  5. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone)  
  6. when matched and u.Addr = NULL then  
  7. delete  
  8. when matched then  
  9. update set Addr=u.Addr, Phone=u.Phone 

 

注意:語(yǔ)句“when matched”和“when not matched”的順序會(huì)影響處理的結(jié)果。上面的SQL語(yǔ)句中,***條語(yǔ)句的條件被完全滿(mǎn)足時(shí),后面的類(lèi)似“when [not] matched”語(yǔ)句就不會(huì)被執(zhí)行了。

MERGE 命令比較實(shí)用的地方在于它將比較復(fù)雜的多條語(yǔ)句集成到單條SQL語(yǔ)句中。不僅僅使得SQL語(yǔ)句更加簡(jiǎn)潔、清晰,還能顯著得提高執(zhí)行效率。使用MERGE命 令僅需訪問(wèn)一次源數(shù)據(jù)表的內(nèi)容,然后直接處理匹配的每條記錄。如果你使用單獨(dú)的insert、update、delete語(yǔ)句來(lái)實(shí)現(xiàn)類(lèi)似的功能時(shí),那么將 至少訪問(wèn)三次源數(shù)據(jù)表的內(nèi)容。

MERGE命令比較靈活些,除了使用基表外,還可以使用派生表。

 

  1. merge into Customers as c  
  2. using (select CustID, Addr, Phone from Cust_updates_week_10  
  3. where Phone is not NULL) as u  
  4. on c.CustID = u.CustID  
  5. when not matched then  
  6. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone  
  7. when matched then  
  8. update set Addr=u.Addr, Phone=u.Phone 

 

MERGE命令有一些限制條件,比如上面的SQL語(yǔ)句中,第3行中的鍵列(CustID)不能被更新。當(dāng)然,還有其它的一些限制。讓我們期待ASE V15.7版本的發(fā)布。

關(guān)于Sybase ASE V15.7的相關(guān)知識(shí)就介紹這么多了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>

【編輯推薦】

  1. Oracle數(shù)據(jù)庫(kù)PL/SQL快捷鍵設(shè)置詳解
  2. Oracle數(shù)據(jù)庫(kù)診斷工具RDA的安裝與使用詳解
  3. Oracle數(shù)據(jù)庫(kù)GLOBAL_NAMES參數(shù)的詳細(xì)研究
  4. Oracle數(shù)據(jù)庫(kù)歸檔模式的切換及其相關(guān)操作詳解
  5. Oracle 10g UNDO表空間過(guò)大導(dǎo)致磁盤(pán)空間不足的解決
責(zé)任編輯:趙鵬 來(lái)源: CSDN博客
相關(guān)推薦

2011-07-18 10:24:18

Debian 7Hurd內(nèi)核

2011-08-01 15:35:51

GlassFishJava 7

2011-09-30 10:02:37

開(kāi)源云計(jì)算OpenStack

2009-01-14 13:56:39

Wine應(yīng)用程序

2017-08-22 21:42:51

WebVRFirefox瀏覽器

2011-09-29 21:24:41

點(diǎn)心省電

2009-07-06 23:30:22

2014-11-04 15:09:02

2015-11-04 12:15:11

應(yīng)用交付深信服OpenStack

2015-06-17 09:17:52

2019-06-12 10:01:10

華勝天成

2010-02-23 17:44:48

Python 3.0

2009-06-17 09:24:34

學(xué)習(xí)strutsStruts新版本

2015-02-05 16:59:36

平安WiFiiOS

2012-05-07 12:31:44

HMPP編譯器OpenACC標(biāo)準(zhǔn)

2015-10-30 15:05:08

Sybase數(shù)據(jù)庫(kù)安全

2012-06-20 16:13:59

街旁

2012-09-24 11:50:04

IBMdw

2009-08-02 08:59:47

Windows 7 R系統(tǒng)升級(jí)

2014-04-17 11:24:44

GoogleAndroid
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)