美文网首页MySQL
32-流程控制-IF-CASE

32-流程控制-IF-CASE

作者: 紫荆秋雪_文 | 来源:发表于2022-09-09 14:37 被阅读0次

一、条件判断语句

A-判断语句-IF语句

1、IF语句的语法结构

IF 表达式1 THEN 操作1 
[ELSEIF 表达式2 THEN 操作2]…… 
[ELSE 操作N] 
END IF
IF val IS NULL THEN
SELECT 'val is null';
ELSE SELECT 'val is not null';
END IF;

2、实战1

声明存储过程“update_salary_by_eid1”,定义IN参数emp_id,输入员工编号。判断该员工薪资如果低于8000元并且入职时间超过5年,就涨薪500元;否则就不变

DELIMITER $
CREATE PROCEDURE update_salary_by_eid(IN emp_id INT)
BEGIN
    DECLARE emp_salary DOUBLE DEFAULT 0;
    DECLARE hire_year INT DEFAULT 0;
    SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
    SELECT TIMESTAMPDIFF(YEAR, hire_date, NOW()) INTO hire_year FROM employees WHERE employee_id = emp_id;

    IF emp_salary < 8000 AND hire_year > 5
    THEN
        UPDATE employees SET salary = salary + 500 WHERE employee_id = emp_id;
    END IF;
END $
DELIMITER ;
  • 调用
CALL update_salary_by_eid(101);

3、实战2

声明存储过程“update_salary_by_eid2”,定义IN参数emp_id,输入员工编号。判断该员工
薪资如果低于9000元并且入职时间超过5年,就涨薪500元;否则就涨薪100元

DELIMITER $
CREATE PROCEDURE update_salary_by_eid1(IN emp_id INT)
BEGIN
    DECLARE emp_salary DOUBLE;
    DECLARE hire_year INT;

    SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
    SELECT TIMESTAMPDIFF(YEAR, hire_date, NOW()) INTO hire_year FROM employees WHERE employee_id = emp_id;

    IF emp_salary < 9000 AND hire_year > 5
    THEN
        UPDATE employees SET salary = salary + 500 WHERE employee_id = emp_id;
    ELSE
        UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
    END IF;

END $
DELIMITER ;
  • 调用
CALL update_salary_by_eid1(101);

4、实战3

声明存储过程“update_salary_by_eid3”,定义IN参数emp_id,输入员工编号。判断该员工
薪资如果低于9000元,就更新薪资为9000元;薪资如果大于等于9000元且低于10000的,但是奖金
比例为NULL的,就更新奖金比例为0.01;其他的涨薪100元

DELIMITER $
CREATE PROCEDURE update_salary_by_eid3(IN emp_id INT)
BEGIN
    DECLARE emp_salary DOUBLE;
    DECLARE emp_commission_pct DOUBLE;

    SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
    SELECT commission_pct INTO emp_commission_pct FROM employees WHERE employee_id = emp_id;

    IF emp_salary < 9000
    THEN
        UPDATE employees SET salary = 9000 WHERE employee_id = emp_id;
    ELSEIF emp_salary < 10000 AND emp_commission_pct IS NULL
    THEN
        UPDATE employees SET commission_pct = 0.01 WHERE employee_id = emp_id;
    ELSE
        UPDATE employees SET salary = salary + 100;
    END IF;
END $
DELIMITER ;
  • 调用
CALL update_salary_by_eid3(106);

B-判断语句-CASE语句

1、CASE语句的语法结构

  • 情况一:单值判断,类似于 switch
CASE 表达式 
    WHEN 值1 THEN 结果1或语句1(如果是语句,需要加分号) 
    WHEN 值2 THEN 结果2或语句2(如果是语句,需要加分号) .
.. 
    ELSE 结果n或语句n(如果是语句,需要加分号) 
    END [CASE](如果是放在begin end中需要加上case,如果放在select后面不需要)
  • eg
CASE val WHEN 1 THEN
SELECT 'val is 1';
WHEN 2 THEN SELECT 'val is 2';
ELSE SELECT 'val is not 1 or 2';
END CASE;
  • 情况二:逻辑判断,类似于多重 if
CASE 
    WHEN 条件1 THEN 结果1或语句1(如果是语句,需要加分号) 
    WHEN 条件2 THEN 结果2或语句2(如果是语句,需要加分号) .
.. 
    ELSE 结果n或语句n(如果是语句,需要加分号) 
    END [CASE](如果是放在begin end中需要加上case,如果放在select后面不需要)
  • eg
CASE WHEN val IS NULL THEN
SELECT 'val is null';
WHEN val < 0 THEN SELECT 'val is less than 0';
WHEN val > 0 THEN SELECT 'val is greater than 0';
ELSE SELECT 'val is 0';
END CASE;

2、实战1

声明存储过程“update_salary_by_eid4”,定义IN参数emp_id,输入员工编号。判断该员工
薪资如果低于9000元,就更新薪资为9000元;薪资大于等于9000元且低于10000的,但是奖金比例
为NULL的,就更新奖金比例为0.01;其他的涨薪100元

DELIMITER $
CREATE PROCEDURE update_salary_by_eid4(IN emp_id INT)
BEGIN
    DECLARE emp_salary DOUBLE;
    DECLARE emp_pct DECIMAL;

    SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
    SELECT commission_pct INTO emp_pct FROM employees WHERE employee_id = emp_id;

    CASE
        WHEN emp_salary < 9000
            THEN UPDATE employees SET salary = 9000 WHERE employee_id = emp_id;
        WHEN emp_salary < 10000 AND emp_pct IS NULL
            THEN UPDATE employees SET commission_pct = 0.01 WHERE employee_id = emp_id;
        ELSE UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
        END CASE;
END $
DELIMITER ;
  • 调用
CALL update_salary_by_eid4(108);

3、实战2

DELIMITER $
CREATE PROCEDURE update_salary_by_eid5(IN emp_id INT)
BEGIN
    DECLARE emp_sal DOUBLE;
    DECLARE hire_year DOUBLE;
    SELECT salary
    INTO emp_sal
    FROM employees
    WHERE employee_id = emp_id;
    SELECT ROUND(DATEDIFF(CURDATE(), hire_date) / 365)
    INTO hire_year
    FROM employees
    WHERE employee_id = emp_id;
    CASE hire_year
        WHEN 0 THEN UPDATE employees SET salary=salary + 50 WHERE employee_id = emp_id;
        WHEN 1 THEN UPDATE employees SET salary=salary + 100 WHERE employee_id = emp_id;
        WHEN 2 THEN UPDATE employees SET salary=salary + 200 WHERE employee_id = emp_id;
        WHEN 3 THEN UPDATE employees SET salary=salary + 300 WHERE employee_id = emp_id;
        WHEN 4 THEN UPDATE employees SET salary=salary + 400 WHERE employee_id = emp_id;
        ELSE UPDATE employees SET salary=salary + 500 WHERE employee_id = emp_id;
        END CASE;
END $
DELIMITER ;

相关文章

  • 32-流程控制-IF-CASE

    一、条件判断语句 A-判断语句-IF语句 1、IF语句的语法结构 2、实战1 声明存储过程“update_sala...

  • 5-流程控制

    流程控制 流程 计算机执行代码的顺序就是流程 流程控制 对计算机代码执行顺序的管理就是流程控制 流程分类 流程控制...

  • 04-流程控制及while循环

    流程控制 流程: 计算机执行代码的顺序,就是流程。 流程控制: 对计算机代码执行顺序的控制,就是流程控制。 流程分...

  • JavaScript-流程控制语句

    一、if流程控制语句 二、switch流程控制语句 三、流程控制语句

  • js流程控制

    2 - 流程控制 2.1 流程控制概念 2.2 顺序流程控制 ​ 顺序结构是程序中最简单、最基本的流程控制,它...

  • 二级-2.Python流程控制

    流程控制 流程:计算机执行代码的顺序就是流程。 流程控制:对计算机代码执行顺序的管理就是流程控制。 流程控制一共分...

  • Python基础重构-1.3流程控制

    流程控制语句 流程控制语句用来实现对程序流程的选择、循环和返回等进行控制,Python中主要的流程控制包括if(判...

  • activiti学习笔记(九)RuntimeService

    RuntimeService 流程运行控制服务 启动流程及对流程数据的控制 流程实例(ProcessInstanc...

  • 【骚全带你学Java---八、流程控制语句】

    java的流程控制语句包含条件语句和循环语句 一.什么是流程控制语句? ·流程控制语句:可以控制程序的执行流程。 ...

  • 2018-11-29

    17js流程控制switch 17js流程控制switch //js流程控制swi...

网友评论

    本文标题:32-流程控制-IF-CASE

    本文链接:https://www.haomeiwen.com/subject/snkonrtx.html