mysql-存储过程(二)-逻辑判断语句

一,if语句:

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

select *,if(sva=1,"男","女") as ssva from taname where sva != ""

IFNULL(expr1,expr2)

假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

mysql> SELECT IFNULL(1,0);
        -> 1

mysql> SELECT IFNULL(NULL,10);
        -> 10

mysql> SELECT IFNULL(1/0,10);
        -> 10

mysql> SELECT IFNULL(1/0,'yes');
        -> 'yes'

IFNULL(expr1,expr2) 的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。

 

if实现条件判断,满足不同条件执行不同的操作,这个我们只要学编程的都知道if的作用了,下面我们来看看mysql 存储过程中的if是如何使用的吧。

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对多个表达式进行组合。

例如,建立一个存储过程,该存储过程通过学生学号(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等也是相同的。

 二,case语句:
  查询语句:
select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != ''

  修改语句:

  编写一条update语句实现商品涨价,具体规则如下

  1、99元以内,提价20%

  2、100-999元之间,提价10%

  3、1000-1999之间,提价5%

  4、其他提价2%

update goods
set price = (
case 
  when price between 0 and 99 then price * 1.2
  when price between 100 and 999 then price * 1.1
  when price between 1000 and 1999 then price * 1.05
  when price > 1999 then price * 1.02
end);
select * from goods;

 

转载于:https://www.cnblogs.com/crazytata/p/10036199.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 MySQL 中的 IF 语句和 CALL 语句结合来触发不同的存储过程。 以下是一个示例代码: ``` IF some_condition THEN CALL stored_procedure_1(); ELSEIF some_other_condition THEN CALL stored_procedure_2(); ELSE CALL stored_procedure_3(); END IF; ``` 其中,some_condition 和 some_other_condition 是你需要判断的条件,可以是任何返回布尔值的表达式。stored_procedure_1、stored_procedure_2 和 stored_procedure_3 是三个不同的存储过程的名称,你可以替换成自己的存储过程名称。 这个代码块将根据不同的条件来调用不同的存储过程。如果 some_condition 为 true,则会调用 stored_procedure_1;如果 some_other_condition 为 true,则会调用 stored_procedure_2;否则将会调用 stored_procedure_3。 ### 回答2: 在 MySQL 中,我们可以使用 IF 条件语句判断并触发不同的存储过程。具体步骤如下: 首先,确保已经创建了需要触发的所有存储过程。 然后,在需要触发存储过程的地方,使用 IF 条件语句来进行判断。IF 语句的基本语法如下: IF (条件1,语句1,IF (条件2,语句2,IF (条件3,语句3,...,ELSE 语句n))) 其中,条件1、条件2、条件3等为真或假的条件表达式,语句1、语句2、语句3等为需要执行的语句。 对于每个存储过程,我们可以将其定义为一个或多个语句组成的块。在 IF 语句中,可以使用 BEGIN 和 END 来定义语句块。 例如,假设我们有两个存储过程 A 和 B,我们要根据某个条件来触发它们。我们可以这样写: IF (条件1, BEGIN -- 语句块1(存储过程 A 的具体实现) END, IF (条件2, BEGIN -- 语句块2(存储过程 B 的具体实现) END, BEGIN -- 默认操作或其他语句 END ) ) 这样,根据条件的不同,将会触发相应的存储过程。如果条件1为真,则执行存储过程 A;如果条件2为真,则执行存储过程 B;如果以上条件都不满足,则执行默认操作或其他语句。 通过以上方法,我们可以根据不同的条件来触发不同的存储过程,实现灵活的业务逻辑处理。 ### 回答3: 在MySQL中,可以使用IF语句判断条件是否成立,并根据条件的不同触发不同的存储过程。 首先,创建两个存储过程A和B,分别用于处理不同的逻辑。例如,存储过程A用于处理满足条件的情况,存储过程B用于处理不满足条件的情况。 然后,在需要进行判断的地方,可以使用IF语句进行条件判断。语法如下: IF 条件 THEN 调用存储过程A; ELSE 调用存储过程B; END IF; 其中,条件是需要判断的表达式,可以是字段的比较、逻辑运算等。 下面是一个使用IF语句触发不同存储过程的示例: DELIMITER // CREATE PROCEDURE A() BEGIN -- 存储过程A的逻辑处理 END // CREATE PROCEDURE B() BEGIN -- 存储过程B的逻辑处理 END // CREATE PROCEDURE main() BEGIN IF (条件) THEN CALL A(); ELSE CALL B(); END IF; END // DELIMITER ; 在上面的示例中,创建了两个存储过程A和B,分别用于处理不同的逻辑。然后创建了一个名为main的存储过程,在其中使用IF语句进行条件判断,并根据条件的不同调用不同的存储过程。 通过以上的方法,可以根据条件的不同触发不同的存储过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值