MySQL高級(jí)函數(shù)-流程控制函數(shù)(if/ifnull/case)

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容