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

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  

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值