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使用处所3:假若令你把张三的寿辰更新成一九四六-10-1,李四的出生之日更新成一九九七-7-1等,相像那样的修改由比比较多。该咋办吧?特别轻易,大好些个人会这么做。

当USEEscort表的数据量超级大,而NAME字段上又未有索引时,每条语句都要拓宽全表扫描,借使那样的语句有这三个,成效会十二分数差,那时大家能够用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
);

方法2:使用CASE语句

CASE使用项所1:把user表导出生成叁个文书,必要性别为男或女,并非1和2,如何是好?我们能够用如下的言辞管理:

CASE使用处合2:要是user这段时间从未有过值,然后您往user导入了一群数量,可是非常不佳,错把男设置成为2,而把女设置成为1,今后供给你转移过来,如何做?

方法1:使用三条语句,先把2翻新成3,接着把1校正成2,最终把3立异成1,很麻烦,不是吗?

以上语句只进行二次全表扫描,功效非常高。

—-write by wave at 2009.9.23

—-last update at 2010.5.7

—越来越多参见:DB2 SQL 精要

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;

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;
 

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 (‘张三’,’李四’);

世家对IF
ELSE语句或然都很熟识,它是用来对经过进展调控的。在SQL的世界中CASE语句语句有相同的成效。上面轻松的牵线CASE语句的用法。思索下面包车型地铁动静,若是有个user表,定义如下:

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=’李四’;

     
细心的爱侣可能已经发掘了,下边包车型地铁格局1的三条语句的进行各样不符合规律,没有错,是自己故意那多少个写的,仅仅是把1产生2,把2产生1就那么麻烦,何况超轻便失误,想象一下,借使有比非常多那样的值供给转移,那是意气风发种何等的景观。辛亏,大家有CASE语句,有过多如此的值需求改造,CASE语句也不会存在难点。也许有个别朋友还是有思疑,那样做会不会死循环啊?哈哈,主见很好,假设您发觉这么做会死循环,必定要告知IBM,作者反正没察觉。

—-end

 

—致谢:higny开掘了本文的一个破绽比比较多,在这里表示沉痛感激

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注