MySQL控制流函數(-if ,elseif,else,case…when)

前言

不管是任何的編程語言,邏輯判斷是必不可缺的一個板塊;在Python、C、java這些火熱的編程語言下,邏輯判斷也是編程語言的一個亮點。

IF(expr1,expr2,expr3) 簡單邏輯判斷

如果第一個條件成立,那麼就返回expr2,如果條件不成立,那麼就返回expr3

IFNULL(v1,v2) 空值替換

如果 v1 的值不為 NULL,則返回 v1,否則返回 v2。

🍖ISNULL(expression) 空值檢測

判斷表達式是否為 NULL

如果為空就會返回1,不為空就會返回0,有時候我們用於邏輯判斷,或者循環語句的時候可以采用

🍝NULLIF(expr1, expr2) 字符串比較

比較兩個字符串,如果字符串 expr1 與 expr2 相等 返回 NULL,否則返回 expr1

 但是在應用型的編程中,第一個還是用的比較的多,那麼有的人就會想,有時候我們有多個條件需要比較的,那麼這個方法就無法實現瞭,又該如何去實現呢?

🍛case 函數

CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END

CASE 表示函數開始,END 表示函數結束。如果 condition1 成立,則返回 result1, 如果 condition2 成立,則返回 result2,當全部不成立則返回 result,而當有一個成立之後,後面的就不執行瞭。

傳入一個參數即可,後面我們在寫存儲過程(函數)的時候,可以充分的應用

這裡沒有傳參,知識按照邏輯判斷進行,如果為真那麼就會返回結果,如果第一個條件就已經滿足瞭,那麼就不會執行後續的判斷瞭

🍤 實操案例

準備數據

-- 創建訂單表
create table orders(
oid int primary key, -- 訂單id
price double, -- 訂單價格
payType int -- 支付類型(1:微信支付 2:支付寶支付 3:銀行卡支付 4:其他)
);

insert into orders values(1,1200,1);
insert into orders values(2,1000,2);
insert into orders values(3,200,3);
insert into orders values(4,3000,1);
insert into orders values(5,1500,2);

我們可以通過兩種方式的語法來講我們的支付方式顯示出現,因為在業務場景中我們為瞭保證數據的有效性和保密性,有些數據我們會公司內部的編碼實現,那麼需要將其展示到老板的眼前的時候,這個時候就需要你來瞭

7

上述分別是用瞭等值判斷和值的映射去實現,一般我更喜歡使用第一種,因為有時候還可以范圍運算

學到這裡的小夥伴,可能就會疑問為什麼,MySQL編程中如此的單一瞭,如果你覺得單一,那麼你肯定是再想為什麼不能實現控制流語句呢?

🍱IF ELSE 做為流程控制語句使用

這個一般和存儲過程搭配使用,相對於Python中的函數,存儲過程就是函數

IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF

與PHP中的IF語句類似,當IF中條件search_condition成立時,執行THEN後的statement_list語句,否則判斷ELSEIF中的條件,成立則執行其後的statement_list語句,否則繼續判斷其他分支。當所有分支的條件均不成立時,執行ELSE分支。search_condition是一個條件表達式,可以由“=、<、<=、>、>=、!=”等條件運算符組成,並且可以使用AND、OR、NOT對多個表達式進行組合。

註意:IF作為一條語句,在END IF後需要加上分號“;”以表示語句結束,其他語句如CASE、LOOP等也是相同的。

例如:

SELECT olddb.STATUS INTO @status_temp FROM olddb.checklist WHERE ID = NEW.ID - 1000000;
IF @status_temp < 5
THEN SET NEW.status = @status_temp +1;
ELSEIF @status_temp = 5
THEN SET NEW.status = 7;
ELSEIF @status_temp = 6
THEN SET NEW.status = 10;
ELSEIF @status_temp = 7
THEN SET NEW.status = 11;
END IF;

到此這篇關於MySQL控制流函數(-if ,elseif,else,case…when)的文章就介紹到這瞭,更多相關MySQL控制流函數 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: