MySQL存储过程(二)IF、CASE…WHEN 判断语句

本文介绍了SQL中用于条件判断的几种语句,包括IF表达式用于简单的真假判断,返回不同的值;IFNULL处理NULL值,提供默认返回;CASE...WHEN语句则支持更复杂的多条件判断,可在查询中嵌入逻辑控制。同时展示了在存储过程中如何使用这些语句来实现不同条件下的数据查询。
摘要由CSDN通过智能技术生成

IF 判断

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

IFNULL语句:IFNULL(expr1,expr2),假如expr1不为null,则返回expr1,否则返回expr2;

IF…ELSE…语句

IF search_condition THEN 
    statement_list
[ELSEIF search_condition THEN]
    statement_list ...
[ELSE statement_list]
 END IF

search_condition表示条件,如果成立时执行THEN后面的statement_list语句,否则执行ELSE后面的statement_list语句。
search_condition是一个条件表达式,可以由条件运算符组成(" = 、 < 、<= 、 > 、 >= 、!= "),也可以使用AND、OR、NOT对多个表达式进行组合。
ELSEIF 分支块可以在IF与[END IF]之间根据条件的数目追加多个。对于多重条件分支结构来说,只有第一个为了 TRUE 的条件才会得到执行。

SELECT name,IF(sex=1,'男','女')sex FROM students;

SELECT COUNT(IF(sex=1,1,NULL)) 男生人数,COUNT(IF(sex=0,1,NULL))女生人数 FROM students;

SELECT IFNULL(price,0) price FROM goods WHERE goodsId='3';

-- 返回结果:0
SELECT IFNULL(SUM(price),0) FROM goods WHERE goodsId=3;

##
CREATE PROCEDURE sp_search_employee(IN p_depart INT)
BEGIN
	IF p_depart = 1 THEN
		SELECT fname,lname,depart from employee where depart = '研究部';
	ELSEIF p_depart = 2 THEN
		SELECT fname,lname,depart from employee where depart = 'AC部';
	ELSEIF p_depart = 3 THEN
		SELECT fname,lname,depart from employee where depart = 'IT部';
	ELSEIF p_depart = 4 THEN
		SELECT fname,lname,depart from employee where depart = '人事部';
	ELSE
		SELECT fname,lname,depart from employee where depart = '经理部';
END IF;
END;

CASE…WHEN (流程控制函数)

Case when语句能在SQL语句中织入判断逻辑,类似于Java中的if else语句,分为简单函数和条件表达式。
简单函数:CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END; 如果字段值等于预期值,则返回结果1,否则返回结果2
        SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score
条件表达式:CASE     WHEN condition THEN result1  ELSE result2   END; 
        语句中的condition是条件判断,如果该判断结果为true,那么CASE语句将返回result,否则返回result2,如果没有ELSE,则返回null。CASE与END之间可以有多个WHEN…THEN…ELSE语句。END表示CASE语句结束。
 

# SQL 语句
SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score;


CREATE PROCEDURE sp_search_employee(IN p_depart INT)
BEGIN
	CASE p_depart
	WHEN 1 THEN
		SELECT fname,lname,depart from employee where depart = '研究部';
	WHEN 2 THEN
		SELECT fname,lname,depart from employee where depart = 'AC部';
	WHEN 3 THEN
		SELECT fname,lname,depart from employee where depart = 'IT部';
	WHEN 4 THEN
		SELECT fname,lname,depart from employee where depart = '人事部';
	ELSE
		SELECT fname,lname,depart from employee where depart = '经理部';
END CASE;
END;

# 处理NUll
-- 正确
case when date is null then 'A' else 'B' end 
-- 不论date是否为null,返回都是 B,也就是判断的都为非null(即使date真的是null)
case date when nu ll then 'A' else 'B' end  

MySQL存储过程中,条件判断语句通常使用IF...ELSEIF...ELSE语句来实现。IF语句用于根据给定条件执行一段代码,如果条件为真,则执行IF语句块中的语句。如果条件为假,则跳过IF语句块。可以使用ELSEIF来添加更多的条件判断,以及使用ELSE来处理其他情况。 以下是一个示例的MySQL存储过程,展示了条件判断语句的用法: ``` DELIMITER $$ CREATE PROCEDURE getUserName() BEGIN DECLARE my_userId VARCHAR(255); DECLARE my_userName VARCHAR(255); SET my_userId = 'APP-2016-00494878'; IF my_userId = 'APP-2016-00494878' THEN SET my_userName = 'John Doe'; ELSEIF my_userId = 'APP-2016-00494879' THEN SET my_userName = 'Jane Smith'; ELSE SET my_userName = 'Unknown User'; END IF; SELECT my_userName; END $$ DELIMITER ; ``` 在上面的示例中,存储过程首先声明了两个变量my_userId和my_userName,然后根据my_userId的值进行条件判断。如果my_userId等于'APP-2016-00494878',则将my_userName设置为'John Doe';如果my_userId等于'APP-2016-00494879',则将my_userName设置为'Jane Smith';否则将my_userName设置为'Unknown User'。 最后,存储过程通过SELECT语句返回my_userName的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mysql存储过程 条件判断/循环语句](https://blog.csdn.net/jxpxlinkui/article/details/79709040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [MySQL存储过程)IF、CASE…WHEN 判断语句](https://blog.csdn.net/Cheng_Q/article/details/129489248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值