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

一, if 语句:

IF(expr1,expr2,expr3)

如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL), 则 IF()的返回值为 expr2; 否则返回值则为 expr3.IF() 的返回值为数字值或字符串值, 具体情况视其所在语境而定.select*,if(sva=1,"男","女")asssvafromtanamewheresva!=""

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]
ENDIF

与 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_gradefloat;
selectgradeintostu_gradefromgradewherestudent_no=stu_noandcourse_no=cour_no;
ifstu_grade>=90then
selectstu_grade,'A';
elseif stu_grade<90andstu_grade>=80then
selectstu_grade,'B';
elseif stu_grade<80andstu_grade>=70then
selectstu_grade,'C';
elseif stu_grade70andstu_grade>=60then
selectstu_grade,'D';
else
selectstu_grade,'E';
endif;
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

setprice=(
case
whenprice between0and99thenprice*1.2
whenprice between100and999thenprice*1.1
whenprice between1000and1999thenprice*1.05
whenprice>1999thenprice*1.02
end);
select*fromgoods;

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