說到if else 你肯定不陌生,這種判斷函數在各種程式語言中是家常便飯,但在編寫SQL語句中,或許你就很少用到了,甚至還沒怎麼玩兒過。
在MySQL中基於對條件判斷的函數又叫「控制流函數」,用於mysql語句中的邏輯判斷。本文帶大家一起來看一看MySQL中都有哪些常用的控制流函數,以及控制流函數的使用場景都有哪些?
MySQl中常見的控制流(判斷)函數包括以下三種,我們今天也著重來看一看這三種判斷函數都是怎麼玩兒的:
1、case when then else end
2、IF(expr,if_true_expr,if_false_expr)
3、IFNULL(expr1,expr2)
在SQL語句中,"CASE WHEN … THEN … ELSE … END"是較常見的用來判斷的語句,適用於增刪改查各類語句中,公式如下:
CASE expressionWHEN if_true_expr THEN return_value1WHEN if_true_expr THEN return_value2WHEN if_true_expr THEN return_value3……ELSE default_return_valueEND1、用在更新語句的更新條件中示例語句如下:
UPDATE users_info u SET u.balance = CASE WHEN u.sex ='女' and u.age > 18 THEN u.balance + 10 ELSE u.balance + 5 end WHERE u.create_time >= '2020-01-01'需要注意的點,Case函數隻返回第一個符合條件的值,剩下的Case when部分將會被自動忽略2、用在查詢語句的返回值中原測試數據如下:
查詢語句:
3、用在分組查詢語句中
數據如下:
分組查詢SQL:
查詢結果:
二、函數:IF(expr,if_true_expr,if_false_expr)
在mysql中if()函數的用法類似於java中的三目表達式,具體語法如下:
IF(expr,if_true_expr,if_false_expr),如果expr的值為true,則返回if_true_expr的值,如果expr的值為false,則返回if_false_expr的值。
原數據:
處理sex欄位為字符格式展示;
如果將(1,2)格式數據改為(『男』,『女』)也可以通過IF函數修改(記得先修改列類型),SQL如下:
修改後數據:
mysql> SELECT SUM(IF(sex = '男',1,0)) as boyNum,SUM(IF(sex = '女',1,0)) as girlNum from student;+---+----+| boyNum | girlNum |+---+----+| 6 | 3 |+---+----+1 row in set (0.00 sec)
三、函數:IFNULL(expr1,expr2)IFNULL函數是MySQL控制流函數之一,它有兩個參數,兩個參數可以是真實值或表達式,如果expr1不是NULL,則返回第一個參數(expr1)。否則,IFNULL函數返回第二個參數。
原始數據:
將SEX為NULL的數據展示為:『未知』:
附、一張有故事的照片(九)
這張圖片來自08年汶川;
在地震中痛失妻子的男子飽含深情,
不忍將亡妻棄之野外,
將其身體與自己綁在一起,
用摩託車載著她前往當地的太平間。
在極大悲痛的折磨中,
他仍努力要給妻子些許死後的尊嚴。