MySQL 中的條件判斷函數(shù)
MySQL 中的條件判斷函數(shù)
條件判斷函數(shù)用來在SQL語句中進(jìn)行條件判斷。根據(jù)不同的條件,執(zhí)行不同的SQL語句
函數(shù)簡介
IF(expr, value1, value2)
# 如果表達(dá)式 expr成立,則執(zhí)行 value1;否則執(zhí)行 value2
IFNULL(v1, v2)
# 如果 v1 不為空,字顯示 v1 的值,否則顯示 v2 的值
CASE
WHEN expr1 THEN v1
[WHEN expr2 THEN v2 ...]
[ELSE vn]
END
# CASE 表示函數(shù)開始,END 表示函數(shù)結(jié)束。如果表示函數(shù)結(jié)束。如果表達(dá)式 expr1 成立, 則返回 v1 的值;如果表達(dá)式 expr2 成立,則返回 v2 的值。以此類推
# 如果都沒有 匹配成立,則返回 else 中的 vn 的值。
CASE expr
WHEN e1 THEN v1
[WHEN e2 THEN v2 ...]
[ELSE vn]
END
# 類似Java中的 switch case
# 當(dāng)表達(dá)式 expr 的值為 e1 時(shí),返回 v1 的值,如果取值為 e2 的值時(shí),返回 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 表示學(xué)號(hào) 為 bigint 類型
name 表示學(xué)生姓名 為 varchar 類型
class 表示班級(jí) 為 int 類型
prefer 表示學(xué)生對某本書練習(xí)冊的買入意愿 2表示想買入, 1表示不想買入, NULL表示學(xué)生沒有填寫該項(xiàng)
現(xiàn)在需要完成以下任務(wù):
1. 1 班和 3 班的全體成員都需要去開一個(gè)班會(huì),2 班不用,用 meeting 屬性表示該學(xué)生需不需要開會(huì) , 1 表示需要, 0 表示不需要,查詢所有需要開會(huì)的學(xué)生并展示(示例查尋結(jié)果如下)
+-------------+----------+-------+---------+
| 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. 現(xiàn)在學(xué)校打算同一對該練習(xí)冊進(jìn)行購買,不想買入的不買入,未填寫意愿的默認(rèn)不買入,請查詢所有學(xué)生的買入情況,并將為 NUll 的值顯示為 1(查詢結(jié)果如下)
+-------------+----------+-------+---------+
| 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;
浙公網(wǎng)安備 33010602011771號(hào)