当前位置:   article > 正文

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

mysql 存储过程 if

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…语句

  1. IF search_condition THEN
  2. statement_list
  3. [ELSEIF search_condition THEN]
  4. statement_list ...
  5. [ELSE statement_list]
  6. END IF

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

  1. SELECT name,IF(sex=1,'男','女')sex FROM students;
  2. SELECT COUNT(IF(sex=1,1,NULL)) 男生人数,COUNT(IF(sex=0,1,NULL))女生人数 FROM students;
  3. SELECT IFNULL(price,0) price FROM goods WHERE goodsId='3';
  4. -- 返回结果:0
  5. SELECT IFNULL(SUM(price),0) FROM goods WHERE goodsId=3;
  6. ##
  7. CREATE PROCEDURE sp_search_employee(IN p_depart INT)
  8. BEGIN
  9. IF p_depart = 1 THEN
  10. SELECT fname,lname,depart from employee where depart = '研究部';
  11. ELSEIF p_depart = 2 THEN
  12. SELECT fname,lname,depart from employee where depart = 'AC部';
  13. ELSEIF p_depart = 3 THEN
  14. SELECT fname,lname,depart from employee where depart = 'IT部';
  15. ELSEIF p_depart = 4 THEN
  16. SELECT fname,lname,depart from employee where depart = '人事部';
  17. ELSE
  18. SELECT fname,lname,depart from employee where depart = '经理部';
  19. END IF;
  20. 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语句结束。
 

  1. # SQL 语句
  2. SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score;
  3. CREATE PROCEDURE sp_search_employee(IN p_depart INT)
  4. BEGIN
  5. CASE p_depart
  6. WHEN 1 THEN
  7. SELECT fname,lname,depart from employee where depart = '研究部';
  8. WHEN 2 THEN
  9. SELECT fname,lname,depart from employee where depart = 'AC部';
  10. WHEN 3 THEN
  11. SELECT fname,lname,depart from employee where depart = 'IT部';
  12. WHEN 4 THEN
  13. SELECT fname,lname,depart from employee where depart = '人事部';
  14. ELSE
  15. SELECT fname,lname,depart from employee where depart = '经理部';
  16. END CASE;
  17. END;
  18. # 处理NUll
  19. -- 正确
  20. case when date is null then 'A' else 'B' end
  21. -- 不论date是否为null,返回都是 B,也就是判断的都为非null(即使date真的是null)
  22. case date when nu ll then 'A' else 'B' end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/873580
推荐阅读
相关标签
  

闽ICP备14008679号