一, 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;
MySQL - 存储过程(二)- 逻辑判断语句
来源: http://www.bubuko.com/infodetail-2865365.html