MySQL中的if和case语句使用总结

本文介绍了MySQL中IF表达式的使用方法,包括条件判断、返回值类型及应用场景。同时,还详细解释了IF作为流程控制语句在存储过程中的应用实例。

Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:

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 != ""

作为表达式的if也可以用CASE when来实现:
复制代码 代码如下:

select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != ''

在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

例如:

复制代码 代码如下:

SELECT CASE 1 WHEN 1 THEN 'one'
  WHEN 2 THEN 'two'
   ELSE 'more' END
as testCol

将输出one

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 ELSE 做为流程控制语句使用

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等也是相同的。
### IF 语句使用方法语法格式 在 MySQL 中,IF 语句是一种流程控制语句,常用于条件判断分支执行。它可以在存储过程、函数、触发器等场景中使用,支持多种语法形式,包括简单的 IF-THEN 结构、IF-THEN-ELSE 结构,以及多个条件分支的 IF-THEN-ELSEIF-ELSE 结构 [^2]。 #### 基本语法格式 IF 语句的基本语法如下: ```sql IF condition THEN statement_list ELSEIF condition THEN statement_list ELSE statement_list END IF; ``` 其中: - `condition` 是一个布尔表达式,可以使用比较运算符(如 `=`, `<`, `<=`, `>`, `>=`, `!=`)逻辑运算符(如 `AND`, `OR`, `NOT`)进行组合。 - `statement_list` 是当条件成立时要执行的一个或多个 SQL 语句。 - `ELSEIF` `ELSE` 是可选部分,用于处理多个条件分支默认情况 [^3]。 #### 示例一:简单 IF-THEN 语句 以下示例演示如何使用 IF-THEN 语句判断一个变量的值,并根据条件输出不同的结果: ```sql DELIMITER $$ CREATE PROCEDURE check_score(IN score INT) BEGIN IF score >= 60 THEN SELECT 'Pass' AS result; END IF; END $$ DELIMITER ; ``` 当调用该存储过程并传入大于等于 60 的分数时,将输出 "Pass";否则不执行任何操作 。 #### 示例二:IF-THEN-ELSE 语句 以下示例使用 IF-THEN-ELSE 判断分数是否及格,并返回相应结果: ```sql DELIMITER $$ CREATE PROCEDURE check_score_with_else(IN score INT) BEGIN IF score >= 60 THEN SELECT 'Pass' AS result; ELSE SELECT 'Fail' AS result; END IF; END $$ DELIMITER ; ``` 当传入的 `score` 大于等于 60 时,输出 "Pass";否则输出 "Fail" [^3]。 #### 示例三:IF-THEN-ELSEIF-ELSE 多条件分支语句 以下示例展示了如何使用多个 ELSEIF 分支,实现更复杂的条件判断: ```sql DELIMITER $$ CREATE PROCEDURE grade_evaluation(IN score INT) BEGIN IF score >= 90 THEN SELECT 'A' AS grade; ELSEIF score >= 80 THEN SELECT 'B' AS grade; ELSEIF score >= 70 THEN SELECT 'C' AS grade; ELSE SELECT 'D' AS grade; END IF; END $$ DELIMITER ; ``` 该存储过程根据传入的分数返回对应的等级:90 分以上为 A,80-89 为 B,70-79 为 C,低于 70 为 D [^2]。 --- ### 注意事项 - IF 语句只能在存储过程、函数、触发器等复合语句使用,不能直接在 SELECT 查询语句中作为条件判断使用。 - IF 语句必须以 `END IF;` 结束。 - 多个条件判断时,MySQL 会从上到下依次匹配,一旦某个条件满足,后续的条件将不再判断。 - 可以使用 `IFNULL()` 或 `CASE` 语句替代部分 IF 逻辑,特别是在查询语句中进行条件判断时 [^1]。 --- ### 相关问题 1. 在 MySQL 中,IF 语句是否可以在 SELECT 查询中直接使用? 2. 如何在 MySQL 查询中使用 IFNULL 函数替代 IF 语句实现空值判断? 3. MySQL 中的 CASE 语句IF 语句在条件判断中的使用区别是什么? 4. IF 语句在存储过程中如何处理多个条件分支? 5. 使用 IF 语句时,是否可以嵌套多个 IF 判断?如何实现?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值