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);
我们可以通过两种方式的语法来讲我们的支付方式显示出现,因为在业务场景中我们为了保证数据的有效性和保密性,有些数据我们会公司内部的编码实现,那么需要将其展示到老板的眼前的时候,这个时候就需要你来了
上述分别是用了等值判断和值的映射去实现,一般我更喜欢使用第一种,因为有时候还可以范围运算
学到这里的小伙伴,可能就会疑问为什么,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;
🍦每文一语
青春能有几个三年!
文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。
原文链接:wxw-123.blog.csdn.net/article/details/123547247
- 点赞
- 收藏
- 关注作者
评论(0)