Mysql中IF條件語句用法


IF 表達式

IF( expr1 , expr2 , expr3 )

expr1 的值為 TRUE,則返回值為 expr2 
expr1 的值為FALSE,則返回值為 expr3

如下:

SELECT IF(TRUE,1+1,1+2);
-> 2
 
SELECT IF(FALSE,1+1,1+2);
-> 3
 
SELECT IF(STRCMP("111","222"),"不相等","相等");
-> 不相等

那么這個 IF 有啥用處呢?舉個例子: 

查找出售價為 50 的書,如果是 java 書的話,就要標注為 已售完 

那么對應的SQL語句該怎樣去寫呢?

select *,if(book_name='java','已賣完','有貨') as product_status from book where price =50

或可用於類似場景統計:按月份統計每個員工考勤異常統計數量

SELECT
    SUM(IF(state=1,1,0)) AS 曠工數unNo,
    SUM(IF(state=2,1,0)) AS 遲到數overNo
FROM kqinfo          
GROUP BY month_date,user_id HAVING (unNo+overNo) > 0

IFNULL 表達式

IFNULL( expr1 , expr2 )

判斷第一個參數expr1是否為NULL:

    如果expr1不為空,直接返回expr1;

    如果expr1為空,返回第二個參數 expr2   

常用在算術表達式計算和組函數中,用來對null值進行轉換處理(返回值是數字或者字符串)

在 expr1 的值不為 NULL的情況下都返回 expr1,否則返回 expr2,如下:

SELECT IFNULL(NULL,"11");
-> 11
 
SELECT IFNULL("00","11");
-> 00

NULLIF 表達式

NULLIF(expr1,expr2):如果兩個參數相等則返回NULL,否則返回第一個參數的值expr1

mysql> select nullif(1,1),nullif(123,321);
+-------------+-----------------+
| nullif(1,1) | nullif(123,321) |
+-------------+-----------------+
|        NULL |             123 |
+-------------+-----------------+

SQL語句中實現“if-then-else”邏輯計算功能

有兩種形式:simple case和searched case

1)simple case的語法結構:

CASE  value
    WHEN  [compare_value] THEN  result
    [WHEN [compare_value] THEN  result ...] 
    [ELSE  result]  END

語義:

  將case后面的值value分別和每個when子句后面的值compare_value進行相等比較:

    如果一旦和某個when子句后面的值相等則返回相應的then子句后面的值result;

    如果和所有when子句后面的值都不相等,則返回else子句后面的值;

    如果沒有else部分則返回null。

注意:

  ①value可以是字面量、表達式或者列名

  ②CASE表達式的數據類型取決於跟在then或else后面的表達式的類型

類型必須相同(可嘗試做隱式類型轉換),否則出錯

mysql> select userid,case salary                                             
    -> when 1000 then 'low'
    -> when 2000 then 'med'
    -> when 3000 then 'high'
    -> else '無效值' end salary_grade
    -> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
|      1 | low          |
|      2 | med          |
|      3 | high         |
|      4 | 無效值        |
|      5 | low          |
+--------+--------------+

2)searched  case的語法結構:

CASE
    WHEN [condition] THEN result
    [WHEN [condition] THEN result ...]
    [ELSE result]  END

語義:

  如果某個when子句后面的條件condition為true,則返回相應的when子句后面的值result;

  如果所有的when子句后面的條件condition都不為true,則返回else子句后面的值;

  如果沒有else部分則返回null。

mysql> select userid,case
    -> when salary<=1000 then 'low'
    -> when salary=2000 then 'med'
    -> when salary>=3000 then 'high'
    -> else '無效值' end salary_grade
    -> from salary_tab;
+--------+--------------+
| userid | salary_grade |
+--------+--------------+
|      1 | low          |
|      2 | med          |
|      3 | high         |
|      4 | 無效值        |
|      5 | low          |
+--------+--------------+

 

 

 

參考文章:https://blog.csdn.net/whatday/article/details/104475399


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM