|
大家對IF ELSE語句可能都很熟悉,它是用來對過程進行控制的。在SQL的世界中CASE語句語句有類似的效果。下面簡單的介紹CASE語句的用法??紤]下面的情況,假設有個user表,定義如下: CREATE TABLE USER CASE使用場合1:把user表導出生成一個文件,要求性別為男或女,而不是1和2,怎么辦?我們可以用如下的語句處理: SELECT CASE使用場合2:假設user目前沒有值,然后你往user導入了一批數(shù)據(jù),但是很不幸,錯把男設置成為2,而把女設置成為1,現(xiàn)在要求你變換過來,怎么辦? 方法1:使用三條語句,先把2更新成3,接著把1更新成2,最后把3更新成1,很麻煩,不是嗎? UPDATE USER SET SEX=3 WHERE SEX=2; 方法2:使用CASE語句 UPDATE USER SET SEX= 細心的朋友可能已經(jīng)發(fā)現(xiàn)了,上面的方法1的三條語句的執(zhí)行順序有問題,沒錯,是我故意那些寫的,僅僅是把1變成2,把2變成1就那么麻煩,而且很容易出錯,想象一下,如果有很多這樣的值需要變換,那是一種什么樣的情況。還好,我們有CASE語句,有好多這樣的值需要變換,CASE語句也不會存在問題??赡苡行┡笥堰€是有疑慮,這樣做會不會死循環(huán)啊?哈哈,想法很好,如果你發(fā)現(xiàn)這樣做會死循環(huán),一定要告訴IBM,我反正沒發(fā)現(xiàn)。 CASE使用場合3:假設讓你把張三的生日更新成1949-10-1,李四的生日更新成1997-7-1等,類似這樣的更新由很多。該怎么辦呢?非常簡單,大多數(shù)人會這么做。 update USER set BIRTHDAY='1949-10-1' where NAME='張三'; 當USER表的數(shù)據(jù)量非常大,而NAME字段上又沒有索引時,每條語句都要進行全表掃描,如果這樣的語句有很多,效率會非常差,這時候我們可以用CASE語句,如下: UPDATE USER SET BIRTHDAY= 以上語句只進行一次全表掃描,效率非常高。 ---致謝:higny發(fā)現(xiàn)了本文的一個錯誤,在此表示嚴重感謝 ---更多參見:DB2 SQL 精要 ----聲明:轉(zhuǎn)載請注明出處。 ----last update at 2010.5.7 ----write by wave at 2009.9.23 ----end |
|
|
來自: 唐僧0012 > 《數(shù)據(jù)庫》