MySQL 中的条件判断函数
MySQL 中的条件判断函数
条件判断函数用来在SQL语句中进行条件判断。根据不同的条件,执行不同的SQL语句
函数简介
IF(expr, value1, value2)
# 如果表达式 expr成立,则执行 value1;否则执行 value2
IFNULL(v1, v2)
# 如果 v1 不为空,字显示 v1 的值,否则显示 v2 的值
CASE
WHEN expr1 THEN v1
[WHEN expr2 THEN v2 ...]
[ELSE vn]
END
# CASE 表示函数开始,END 表示函数结束。如果表示函数结束。如果表达式 expr1 成立, 则返回 v1 的值;如果表达式 expr2 成立,则返回 v2 的值。以此类推
# 如果都没有 匹配成立,则返回 else 中的 vn 的值。
CASE expr
WHEN e1 THEN v1
[WHEN e2 THEN v2 ...]
[ELSE vn]
END
# 类似Java中的 switch case
# 当表达式 expr 的值为 e1 时,返回 v1 的值,如果取值为 e2 的值时,返回 v2 的值 ...
# 如果都不是上面的取值,返回 else 中的 vn 值
使用示例
对于Student表
+-------------+----------+-------+---------+
| student_id | name | class | prefer |
+-------------+------------------+---------+
| 611800 | xiaowang | 3 | 2 |
| 611801 | xiaoli | 2 | 2 |
| 611802 | zhaosi | 2 | 1 |
| 611803 | wangwu | 3 | 1 |
| 611804 | laoliu | 1 | NULL |
+-------------+----------+-------+---------+
student_id 表示学号 为 bigint 类型
name 表示学生姓名 为 varchar 类型
class 表示班级 为 int 类型
prefer 表示学生对某本书练习册的买入意愿 2表示想买入, 1表示不想买入, NULL表示学生没有填写该项
现在需要完成以下任务:
1. 1 班和 3 班的全体成员都需要去开一个班会,2 班不用,用 meeting 属性表示该学生需不需要开会 , 1 表示需要, 0 表示不需要,查询所有需要开会的学生并展示(示例查寻结果如下)
+-------------+----------+-------+---------+
| student_id | name | class | meeting |
+-------------+------------------+---------+
| 611800 | xiaowang | 3 | 1 |
| 611801 | xiaoli | 2 | 0 |
| 611802 | zhaosi | 2 | 0 |
| 611803 | wangwu | 3 | 1 |
| 611804 | laoliu | 1 | 1 |
+-------------+----------+-------+---------+
2. 现在学校打算同一对该练习册进行购买,不想买入的不买入,未填写意愿的默认不买入,请查询所有学生的买入情况,并将为 NUll 的值显示为 1(查询结果如下)
+-------------+----------+-------+---------+
| student_id | name | class | prefer |
+-------------+------------------+---------+
| 611800 | xiaowang | 3 | 2 |
| 611801 | xiaoli | 2 | 2 |
| 611802 | zhaosi | 2 | 1 |
| 611803 | wangwu | 3 | 1 |
| 611804 | laoliu | 1 | 1 |
+-------------+----------+-------+---------+
# 问题 1
# 使用 IF(expr, v1, v2)
SELECT
student_id,
name,
class,
IF(class = 3 OR class = 1, 1, 0) meeting
FROM Student;
# 使用 CASE
SELECT
student_id,
name,
class,
CASE
WHEN class = 1 OR class = 3 THEN 1
ELSE 0
END meeting
FROM Student;
# 使用CASE expr
SELECT
student_id,
name,
class,
CASE class
WHEN 1 THEN 1
WHEN 3 THEN 1
ELSE 0
END meeting
FROM Student;
# 问题2
# 使用 IFNULL
SELECT
student_id,
name,
class,
IFNULL(prefer, 1) prefer
FROM Student;