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;
posted @ 2022-10-25 15:21  PupilXIao  阅读(578)  评论(0编辑  收藏  举报