網站首頁 編程語言 正文
sql中的if和else
MySQL的IF既可以作為表達式用,也可在存儲過程中作為流程控制語句使用,如下是做為表達式使用:
IF表達式
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數字值或字符串值,具體情況視其所在語境而定。
SELECT IF(sva=1,"男","女") AS s FROM table_name?
WHERE sva != '';
作為表達式的if也可以用CASE WHEN來實現:
SELECT CASE sva
WHEN 1 THEN '男'?
ELSE '女'?
END AS s?
FROM table_name
WHERE sva != '';
在第一個方案的返回結果中, value=compare-value。
而第二個方案的返回結果是第一種情況的真實結果。
如果沒有匹配的結果值,則返回結果為ELSE后的結果,如果沒有ELSE 部分,則返回值為 NULL。
例如:
SELECT CASE 1?
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'?
? ?ELSE 'more'?
END AS test
將輸出one
IFNULL(expr1,expr2)
假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。
IFNULL()的返回值是數字或是字符串,具體情況取決于其所使用的語境。
?SELECT IFNULL(1,0);
?-> 1
SELECT IFNULL(NULL,10);
?-> 10
SELECT IFNULL(1/0,10);
-> 10
SELECT IFNULL(1/0,'yes');
-> 'yes'
IFNULL(expr1,expr2) 的默認結果值為兩個表達式中更加“通用”的一個,順序為STRING、 REAL或 INTEGER。
IF ELSE 做為流程控制語句使用
IF實現條件判斷,滿足不同條件執行不同的操作,這個我們只要學編程的都知道IF的作用了,下面我們來看看mysql 存儲過程中的IF是如何使用的吧。
IF search_condition?
THEN statement_list ?
[ELSEIF search_condition THEN] ?
? ? statement_list ... ?
[ELSE statement_list] ?
END IF?
當IF中條件search_condition成立時,執行THEN后的statement_list語句,否則判斷ELSEIF中的條件,成立則執行其后的statement_list語句,否則繼續判斷其他分支。
當所有分支的條件均不成立時,執行ELSE分支。search_condition是一個條件表達式,可以由“=、<、<=、>、>=、!=”等條件運算符組成,并且可以使用AND、OR、NOT對多個表達式進行組合。
例如,建立一個存儲過程,該存儲過程通過學生學號(student_no)和課程編號(course_no)查詢其成績(grade),返回成績和成績的等級,成績大于90分的為A級,小于90分大于等于80分的為B級,小于80分大于等于70分的為C級,依次到E級。
那么,創建存儲過程的代碼如下:
CREATE PROCEDURE dbname.proc_getGrade ?
(stu_no varchar(20),cour_no varchar(10)) ?
BEGIN?
DECLARE stu_grade float; ?
SELECT grade into stu_grade FROM grade?
WHERE student_no=stu_no AND course_no=cour_no; ?
IF stu_grade>=90 THEN?
? ? SELECT stu_grade,'A'; ?
ELSEIF stu_grade<90 AND stu_grade>=80 THEN?
? ? SELECT stu_grade,'B'; ?
ELSEIF stu_grade<80 AND stu_grade>=70 THEN?
? ? SELECT stu_grade,'C'; ?
ELSEIF stu_grade70 AND stu_grade>=60 THEN ?
? ? SELECT stu_grade,'D'; ?
ELSE?
? ? SELECT stu_grade,'E'; ?
END IF; ?
END
注意:IF作為一條語句,在END IF后需要加上分號“;”以表示語句結束,其他語句如CASE、LOOP等也是相同的。
原文鏈接:https://blog.csdn.net/qq_40121580/article/details/106680985
相關推薦
- 2022-10-19 react+antd實現動態編輯表格數據_React
- 2022-06-18 android實現在圖標上顯示數字_Android
- 2022-04-25 JQuery異步post上傳表單數據標準化模板_jquery
- 2022-05-06 Python判斷字符串中是否是中英文文小技巧
- 2022-04-09 iOS實現簡單計算器小功能_IOS
- 2022-03-30 python實現記事本功能_python
- 2021-12-16 聊聊Navicat統計的行數竟然和表實際行數不一致的問題_數據庫其它
- 2022-05-10 總結:虛擬DOM和生命周期
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支