小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

case

 唐僧0012 2014-09-28

大家對IF ELSE語句可能都很熟悉,它是用來對過程進行控制的。在SQL的世界中CASE語句語句有類似的效果。下面簡單的介紹CASE語句的用法??紤]下面的情況,假設有個user表,定義如下:

CREATE TABLE USER   
(   
NAME VARCHAR(20) NOT NULL,---姓名   
SEX INTEGER,---性別(1、男   2、女)   
BIRTHDAY DATE---生日   
);  
CREATE TABLE USER
(
NAME VARCHAR(20) NOT NULL,---姓名
SEX INTEGER,---性別(1、男 2、女)
BIRTHDAY DATE---生日
);

CASE使用場合1:把user表導出生成一個文件,要求性別為男或女,而不是1和2,怎么辦?我們可以用如下的語句處理:

SELECT    
    NAME,   
    CASE SEX   
        WHEN 1 THEN '男'  
        ELSE '女'  
    END AS SEX,   
    BIRTHDAY   
FROM USER;  
SELECT 
 NAME,
 CASE SEX
  WHEN 1 THEN '男'
  ELSE '女'
 END AS SEX,
 BIRTHDAY
FROM USER;
 

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;   
UPDATE USER SET SEX=1 WHERE SEX=3;   
UPDATE USER SET SEX=2 WHERE SEX=1;  
UPDATE USER SET SEX=3 WHERE SEX=2;
UPDATE USER SET SEX=1 WHERE SEX=3;
UPDATE USER SET SEX=2 WHERE SEX=1;

方法2:使用CASE語句

UPDATE USER SET SEX=   
(   
CASE SEX   
WHEN 1 THEN 2   
WHEN 2 THEN 1   
ELSE SEX   
END   
);  
UPDATE USER SET SEX=
(
CASE SEX
WHEN 1 THEN 2
WHEN 2 THEN 1
ELSE SEX
END
);

      細心的朋友可能已經(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='張三';   
update USER set BIRTHDAY='1997-7-1' where NAME='李四';  
update USER set BIRTHDAY='1949-10-1' where NAME='張三';
update USER set BIRTHDAY='1997-7-1' where NAME='李四';

當USER表的數(shù)據(jù)量非常大,而NAME字段上又沒有索引時,每條語句都要進行全表掃描,如果這樣的語句有很多,效率會非常差,這時候我們可以用CASE語句,如下:

UPDATE USER SET BIRTHDAY=   
(   
CASE NAME   
WHEN '張三' THEN '1949-10-1'  
WHEN '李四' THEN '1997-7-1'  
ELSE BIRTHDAY   
END   
)   
where NAME in ('張三','李四');  
UPDATE USER SET BIRTHDAY=
(
CASE NAME
WHEN '張三' THEN '1949-10-1'
WHEN '李四' THEN '1997-7-1'
ELSE BIRTHDAY
END
)
where NAME in ('張三','李四');

以上語句只進行一次全表掃描,效率非常高。

---致謝:higny發(fā)現(xiàn)了本文的一個錯誤,在此表示嚴重感謝

---更多參見:DB2 SQL 精要

----聲明:轉(zhuǎn)載請注明出處。

----last update at 2010.5.7

----write by wave at 2009.9.23

----end


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多