在查询语句中,我们可能会遇到使用条件判断函数的情况,今天记录一下条件判断函数的使用。
名称 | 具体作用 |
IF(EXPR ,V1,V2) | 如果满足条件返回第一个值,否则返回第二个 |
IFNULL(V1,V2) | 为空时返回第一个,不为空返回第二个 |
CASE WHEN EXP1 THEN V1 WHEN EXP2 THEN V2 ELSE V3 | 根据具体数据判断符合哪一个条件并返回符合条件的对应的值,例如:满足EXP1就返回V1 |
实例:
select id ,username ,score , if (score>60,'及格','不及格') as '考核' from student;
| id | username | score | 考核 |
+----+----------+-------+--------+
| 1 | king | 95 | 及格 |
| 2 | king1 | 25 | 不及格 |
| 3 | king2 | 30 | 不及格 |
| 4 | king3 | 35 | 不及格 |
| 5 | king4 | 50 | 不及格 |
| 6 | king5 | 55 | 不及格 |
| 7 | king6 | 80 | 及格 |
| 8 | king7 | 90 | 及格 |
| 9 | king8 | 25 | 不及格 |
| 10 | king9 | 45 | 不及格 |
+----+----------+-------+--------+
select id ,username ,age , ifnull(age,'空') from cms_user;
+----+----------+------+------------------+
| id | username | age | ifnull(age,'空') |
+----+----------+------+------------------+
| 1 | 张三 | 21 | 21 |
| 2 | 张三丰 | 31 | 31 |
| 3 | 章子怡 | 43 | 43 |
| 4 | long | 41 | 41 |
| 6 | queen | 66 | 66 |
| 7 | king | 22 | 22 |
| 8 | blek | 53 | 53 |
| 9 | rose | 9 | 9 |
| 10 | lily | 39 | 39 |
| 11 | john | 72 | 72 |
| 12 | test1 | NULL | 空 |
| 13 | TEST2 | 18 | 18 |
+----+----------+------+------------------+
select id ,username ,score ,case when score>60 then '及格' when score=60 then '太险了' when score<60 then '有点差劲'end as '分段' from student;
+----+----------+-------+----------+
| id | username | score | 分段 |
+----+----------+-------+----------+
| 1 | king | 95 | 及格 |
| 2 | king1 | 25 | 有点差劲 |
| 3 | king2 | 30 | 有点差劲 |
| 4 | king3 | 35 | 有点差劲 |
| 5 | king4 | 50 | 有点差劲 |
| 6 | king5 | 55 | 有点差劲 |
| 7 | king6 | 80 | 及格 |
| 8 | king7 | 90 | 及格 |
| 9 | king8 | 25 | 有点差劲 |
| 10 | king9 | 45 | 有点差劲 |
+----+----------+-------+----------+
还有一种case的形式如下:
case 变量或者表达式或者字段
when 常量1 then 值1
when 常量2 then 值2
....
else
end
注意区分两种形式的不同点
下面如果部门是30 显示1.1倍的工资,其他的一次类推,写法如下:
select department_id ,salary case department_id when 30 then salary*1.1 when 40 then salary*1.2 when 50 then salary*1.3 else salary end from employees;
注意的是这些函数的位置是在字段的时候使用,意思就是这些条件是对字段的操作,应该放在查询条件之前。