SQL中的IF ELSE(CASE语句的使用)
来源:互联网 发布:软件设计师准考证 编辑:程序博客网 时间:2024/06/01 08:43
大家对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导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?
方法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
);
细心的朋友可能已经发现了,上面的方法1的三条语句的执行顺序有问题,没错,是我故意那些写的,仅仅是把1变成2,把2变成1就那么麻烦,而且很容易出错,想象一下,如果有很多这样的值需要变换,那是一种什么样的情况。还好,我们有CASE语句,有好多这样的值需要变换,CASE语句也不会存在问题。可能有些朋友还是有疑虑,这样做会不会死循环啊?哈哈,想法很好,如果你发现这样做会死循环,一定要告诉IBM,我反正没发现。
CASE使用场合3:假设让你把张三的生日更新成1949-10-1,李四的生日更新成1997-7-1等,类似这样的更新由很多。该怎么办呢?非常简单,大多数人会这么做。
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表的数据量非常大,而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发现了本文的一个错误,在此表示严重感谢
---更多参见:DB2 SQL 精要
----声明:转载请注明出处。
----last update at 2010.5.7
----write by wave at 2009.9.23
----end
- SQL中的IF ELSE(CASE语句的使用)
- SQL中的IF ELSE(CASE语句的使用)
- SQL中的IF ELSE(CASE语句的使用)
- SQL中的IF ELSE(CASE语句的使用)
- SQL中的IF ELSE(CASE语句的使用)
- 活用SQL中的IF ELSE;CASE语句
- sql中的判断语句 if...else的使用
- C#中的分支结构:if..else if 、if... else 和 switch ...case语句的区别
- C语言选择语句的使用---if()-else和switch--case
- if else语句的使用
- Sql语句:IF ELSE CASE WHEN WHILE CONTINUE BREAK
- JAVA流程控制 IF ELSE语句与Switch Case语句的使用
- sql if else 语句
- sql中的if else语句和if test 语句的区别
- 使用case语句来改善verilog代码中if……else分支过多的问题
- sql语句中的判断语句case when else end
- Flex中的if...else if...else语句
- C语言中switch case语句的实现(switch case 和 else if 的比较、区别)
- 获取客户端的IP地址
- 如何在NokiaQtSDK中开发Symbian Qt应用
- 这是我在学习struts2第三节课件时候记得笔记,内容还算详细,可以看看
- POJ 1386 Play on Words(判断欧拉回路存在)
- 删除XML文件中的元素(三)
- SQL中的IF ELSE(CASE语句的使用)
- I'm back.
- 网页设计工具-灰盒排版方法 很有意思
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- SQL中的日期计算
- 单反拍摄技巧:利用直方图曝光
- 最小生成树PRIM算法及KRUSKAL算法第四集
- PKU-1002使用java编写用快速排序为何一直Runtime Error 无解 留下问题 以后再看
- Java异常发生时程序的执行顺序