mysql的if既可以作為表達式用,也可在存儲過程中作為流程控制語句使用,本篇文章主要講的是mysql中if語句的常規(guī)使用,具有一定的學(xué)習(xí)價值,感興趣的朋友可以了解一下。
IF表達式
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 0 and expr1 NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數(shù)字值或字符串值,具體情況視其所在語境而定。
select?*,if(sva=1,"男","女")?as?ssva?from?taname?where?sva?!=?""
作為表達式的if也可以用CASE when來實現(xiàn):
select?CASE?sva?WHEN?1?THEN?'男'?ELSE?'女'?END?as?ssva?from?taname?where?sva?!=?''
在第一個方案的返回結(jié)果中, value=compare-value。而第二個方案的返回結(jié)果是第一種情況的真實結(jié)果。如果沒有匹配的結(jié)果值,則返回結(jié)果為ELSE后的結(jié)果,如果沒有ELSE 部分,則返回值為 NULL。
例如:
SELECT?CASE?1?WHEN?1?THEN?'one' ??WHEN?2?THEN?'two'? ???ELSE?'more'?ENDas?testCol
將輸出one
IFNULL(expr1,expr2)
假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。IFNULL()的返回值是數(shù)字或是字符串,具體情況取決于其所使用的語境。
mysql>?SELECT?IFNULL(1,0); ????????->?1mysql>?SELECT?IFNULL(NULL,10); ????????->?10mysql>?SELECT?IFNULL(1/0,10); ????????->?10mysql>?SELECT?IFNULL(1/0,'yes'); ????????->?'yes'
IFNULL(expr1,expr2) 的默認結(jié)果值為兩個表達式中更加“通用”的一個,順序為String、 REAL或 Integer。
IF ELSE 做為流程控制語句使用
if實現(xiàn)條件判斷,滿足不同條件執(zhí)行不同的操作,這個我們只要學(xué)編程的都知道if的作用了,下面我們來看看mysql 存儲過程中的if是如何使用的吧。
IF?search_condition?THEN? ????statement_list?? [ELSEIF?search_condition?THEN]?? ????statement_list?...??[ELSE? ????statement_list]??END?IF
與php中的IF語句類似,當(dāng)IF中條件search_condition成立時,執(zhí)行THEN后的statement_list語句,否則判斷ELSEIF中的條件,成立則執(zhí)行其后的statement_list語句,否則繼續(xù)判斷其他分支。當(dāng)所有分支的條件均不成立時,執(zhí)行ELSE分支。search_condition是一個條件表達式,可以由“=、、>=、!=”等條件運算符組成,并且可以使用AND、OR、NOT對多個表達式進行組合。
例如,建立一個存儲過程,該存儲過程通過學(xué)生學(xué)號(student_no)和課程編號(course_no)查詢其成績(grade),返回成績和成績的等級,成績大于90分的為A級,小于90分大于等于80分的為B級,小于80分大于等于70分的為C級,依次到E級。那么,創(chuàng)建存儲過程的代碼如下:
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=80?then? ????select?stu_grade,'B';??elseif?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后需要加上分號“;”以表示語句結(jié)束,其他語句如CASE、LOOP等也是相同的。
相關(guān)教程:mysql視頻教程