SQL中的IF ELSE(CASE语句的使用)

Posted pangang-test

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中的IF ELSE(CASE语句的使用)相关的知识,希望对你有一定的参考价值。

大家对IF ELSE语句可能都很熟悉,它是用来对过程进行控制的。在SQL的世界中CASE语句语句有类似的效果。下面简单的介绍CASE语句的用法。考虑下面的情况,假设有个user表,定义如下:

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;
 

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

方法2:使用CASE语句


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

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

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

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

转载请说明出处,多谢




































以上是关于SQL中的IF ELSE(CASE语句的使用)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server判断语句(IF ELSE/CASE WHEN )

SqlAlchemy:case 语句(case - if - then -else)

SqlAlchemy:case语句(case - if - then -else)

SQL里if语句和case语句有啥区别吗?哪个使用更高效?就是查询更优化?

在oracle sql语句里有没有if...else...的用法,请各位大侠给个例子看看,灰常感谢!!

SQL Server判断语句(IF ELSE/CASE WHEN )