mysql case and_MySQL CASE和IF语句使用

SQL语句中的case语句与高级语言中的switch语句,是标准SQL的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作。

首先,让我们看一下CASE的语法。在一般的SELECT中,其语法格式如下:

CASE

WHEN THEN

WHEN THEN

...

WHEN THEN

ELSE

END

1

2

3

4

5

6

7

CASE

WHENTHEN

WHENTHEN

...

WHENTHEN

ELSE

END

创建一个用户表

CREATE TABLE `user` (

id int(10) unsigned NOT NULL auto_increment primary key,

sex tinyint(1) COMMENT '性别:0女;1男;2保密'

) ENGINE=InnoDB;

insert into user(sex) select(0);

insert into user(sex) select(1);

insert into user(sex) select(2);

insert into user(sex) select(1);

insert into user(sex) select(0);

1

2

3

4

5

6

7

8

9

10

CREATETABLE`user`(

idint(10)unsignedNOTNULLauto_incrementprimarykey,

sextinyint(1)COMMENT'性别:0女;1男;2保密'

)ENGINE=InnoDB;

insertintouser(sex)select(0);

insertintouser(sex)select(1);

insertintouser(sex)select(2);

insertintouser(sex)select(1);

insertintouser(sex)select(0);

简单Case函数写法

mysql> select sex,(CASE sex WHEN '1' THEN '男' WHEN '0' THEN '女' ELSE '保密' END) as sex_text from user;

+------+----------+

| sex | sex_text |

+------+----------+

| 0 | 女 |

| 1 | 男 |

| 2 | 保密 |

| 1 | 男 |

| 0 | 女 |

+------+----------+

5 rows in set (0.00 sec)

1

2

3

4

5

6

7

8

9

10

11

mysql>selectsex,(CASEsexWHEN'1'THEN'男'WHEN'0'THEN'女'ELSE'保密'END)assex_textfromuser;

+------+----------+

|sex|sex_text|

+------+----------+

|0|女|

|1|男|

|2|保密|

|1|男|

|0|女|

+------+----------+

5rowsinset(0.00sec)

Case搜索函数写法(注意sex的位置【推荐】)

mysql> select sex,(CASE WHEN sex=1 THEN '男' WHEN sex=0 THEN '女' ELSE '保密' END) as sex_text from user;

+------+----------+

| sex | sex_text |

+------+----------+

| 0 | 女 |

| 1 | 男 |

| 2 | 保密 |

| 1 | 男 |

| 0 | 女 |

+------+----------+

5 rows in set (0.00 sec)

1

2

3

4

5

6

7

8

9

10

11

mysql>selectsex,(CASEWHENsex=1THEN'男'WHENsex=0THEN'女'ELSE'保密'END)assex_textfromuser;

+------+----------+

|sex|sex_text|

+------+----------+

|0|女|

|1|男|

|2|保密|

|1|男|

|0|女|

+------+----------+

5rowsinset(0.00sec)

总结:简单Case函数写法只适合相等条件判断,不能用于大于、小于及不等于的判断,Case搜索函数写法适合复杂条件判断:可用于大于、小于及不等于的判断。临时生成的字段是可以排序的,或做其他处理。

IF语句的用法

IF(expr1,expr2,expr3),如果expr1是TRUE,则返回expr2,否则返回expr3。IF不像CASE那样可以多条件判断,IF只能判断“真”、“假”。

mysql> select sex,IF(sex='1','男','未知') as sex_text from user;

+------+----------+

| sex | sex_text |

+------+----------+

| 0 | 未知 |

| 1 | 男 |

| 2 | 未知 |

| 1 | 男 |

| 0 | 未知 |

+------+----------+

5 rows in set (0.01 sec)

1

2

3

4

5

6

7

8

9

10

11

mysql>selectsex,IF(sex='1','男','未知')assex_textfromuser;

+------+----------+

|sex|sex_text|

+------+----------+

|0|未知|

|1|男|

|2|未知|

|1|男|

|0|未知|

+------+----------+

5rowsinset(0.01sec)

除了查询使用CASE/IF外,可能你还会碰到下面这种语句,在UPDATE中使用CASE更新数据。如下操作,注意看更新后的结果,把符合条件的值做对应更新,而把没有符合条件的记录全部重置为默认值,所以如果真有这种需求时一定要多做测试。

mysql> update user set sex=(case when id>2 and id<4 then 0 when id>=4 then 2 end);

Query OK, 5 rows affected (0.01 sec)

Rows matched: 5 Changed: 5 Warnings: 0

mysql> select * from user;

+----+------+

| id | sex |

+----+------+

| 1 | NULL |

| 2 | NULL |

| 3 | 0 |

| 4 | 2 |

| 5 | 2 |

+----+------+

5 rows in set (0.00 sec)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

mysql>updateusersetsex=(casewhenid>2andid<4then0whenid>=4then2end);

QueryOK,5rowsaffected(0.01sec)

Rowsmatched:5Changed:5Warnings:0

mysql>select*fromuser;

+----+------+

|id|sex|

+----+------+

|1|NULL|

|2|NULL|

|3|0|

|4|2|

|5|2|

+----+------+

5rowsinset(0.00sec)

完结。。。

如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值