1、if 函數(shù)
if函數(shù)作用:
根據(jù)表達(dá)式的某個(gè)條件或值結(jié)果來(lái)執(zhí)行一組 sql 語(yǔ)句
if 函數(shù)的語(yǔ)法格式:
IF(expr,v1,v2)
語(yǔ)法格式說(shuō)明:
expr:表達(dá)式,返回 true、false、null
v1:當(dāng)expr = true時(shí)返回 v1
v2:當(dāng)expr = false、null 時(shí)返回v2
例子:

emp表
SQL分析
- 查詢員工的name、在職狀態(tài)
- 在職狀態(tài)通過(guò) if 函數(shù)去判斷,返回【在職】or【離職】
select name,if(is_enable = 1,"在職","離職") "在職狀態(tài)" from emp;

result
2、ifnull函數(shù)
ifnull函數(shù)的作用
可以判斷某個(gè)字段的值是否為 null,為 null 則返回預(yù)先設(shè)定的值;有點(diǎn)像編程里面的三元表達(dá)式(只可意會(huì)不可言傳,不懂三元表達(dá)式就忽略吧~)
ifnull的語(yǔ)法格式:
IFNULL(v1,v2)
語(yǔ)法格式說(shuō)明:
- 如果 v1 不為 NULL,則 IFNULL 函數(shù)返回 v1,否則返回 v2
- v1、v2 均可以是值或表達(dá)式
例子

emp表
SQL分析
若員工的 dept_id 為 null ,則顯示【無(wú)部門(mén)】
select id,name,ifnull(dept_id,"無(wú)部門(mén)") "部門(mén)" from emp;

result
3、case函數(shù)
case 函數(shù)的作用
- if 的高級(jí)版,類(lèi)似Java 里面的 switch ... case
- 通過(guò)條件表達(dá)式匹配 case 對(duì)應(yīng)的值,然后執(zhí)行對(duì)應(yīng)的操作
第一種用法:簡(jiǎn)單的 case 的語(yǔ)法格式
只有一個(gè)條件表達(dá)式
CASE <表達(dá)式>
WHEN <值1> THEN <操作>
WHEN <值2> THEN <操作>
...
ELSE <操作>
END;
語(yǔ)法格式說(shuō)明:
- 將 <表達(dá)式> 的值 逐一和 每個(gè) when 跟的 <值> 進(jìn)行比較
- 如果跟某個(gè)<值>相等,則執(zhí)行它后面的 <操作> ,如果所有 when 的<值>都不相等,則執(zhí)行 else 的<操作>
- 如果 when 的<值>都不相等,且沒(méi)寫(xiě) else,則會(huì)報(bào)錯(cuò)??!
- 語(yǔ)法中end不能缺少
重點(diǎn)注意:如果有多個(gè)when,只要<值/表達(dá)式>滿足,就進(jìn)行<操作>,就不會(huì)繼續(xù)向下執(zhí)行了!無(wú)法case穿透!無(wú)法case穿透!無(wú)法case穿透!
例子

emp表
SQL分析
根據(jù)部門(mén)id進(jìn)行判斷部門(mén)名稱
-- 注意:以下sql沒(méi)有case穿透這一說(shuō)!?。?SELECT name,dept_id,
CASE
dept_id
WHEN 0 THEN "實(shí)習(xí)生"
WHEN 1 THEN "銷(xiāo)售部"
WHEN 2 THEN "信息部"
WHEN 2 THEN "財(cái)務(wù)部"
ELSE "沒(méi)有部門(mén)"
END AS "部門(mén)"
FROM
emp;

result
第二種用法:可搜索 case 的語(yǔ)法格式
CASE
WHEN <條件1.1> and <條件1.2> and ... THEN <操作>
WHEN <條件2.1> and <條件2.2> and ... THEN <操作>
...
ELSE <操作>
END;
語(yǔ)法格式說(shuō)明
- 每個(gè) <條件> 都是獨(dú)立的,可以用 and 來(lái)連接多個(gè)查詢條件
- 不同 <條件> 是互不關(guān)聯(lián)且互不影響的
例子

emp表
SQL分析
每個(gè)條件都是不一樣的,可以任意指定查詢條件,可簡(jiǎn)單可復(fù)雜
select name,dept_id,
case
when dept_id=1 and leader != 0 and is_enable !=0 then "銷(xiāo)售部在職員工"
when dept_id =2 and leader = 0 and is_enable =0 then "信息部大佬"
when leader = 8 then "任我行大佬"
else "啥都不是"
end
from emp;

result