分支结构

分支结构主要有两种类型:IF THEN  与 CASE WHEN

1.IF THEN

简单示例:

 1 DELIMITER //
 2 
 3 CREATE PROCEDURE test_if()
 4 
 5 BEGIN    
 6     DECLARE age INT DEFAULT 20;
 7     
 8     IF age > 40
 9         THEN SELECT '中老年';
10     ELSEIF age > 18
11         THEN SELECT '青壮年';
12     ELSEIF age > 8
13         THEN SELECT '青少年';
14     ELSE
15         SELECT '婴幼儿';
16     END IF;
17     
18 
19 END //
20 
21 DELIMITER ;

语句总体结构 :IF   条件  THEN SELECT 该条件下对应的结果         

       ELSE IF 条件 THEN SELECT 该条件下对应的结果     

       ELSE SELECT 该条件下对应的结果

          END IF;

综合实例应用:

 1 #举例2:声明存储过程“update_salary_by_eid1”,定义IN参数emp_id,输入员工编号。
 2 #判断该员工薪资如果低于8000元并且入职时间超过5年,就涨薪500元;否则就不变。
 3 
 4 DELIMITER //
 5 
 6 CREATE PROCEDURE update_salary_by_eid1(IN emp_id INT)
 7 BEGIN
 8     #声明局部变量
 9     DECLARE emp_sal DOUBLE; #记录员工的工资
10     DECLARE hire_year DOUBLE; #记录员工入职公司的年头
11     
12     
13     #赋值
14     SELECT salary INTO emp_sal FROM employees WHERE employee_id = emp_id;
15     
16     SELECT DATEDIFF(CURDATE(),hire_date)/365 INTO hire_year FROM employees WHERE employee_id = emp_id;
17     
18     #判断
19     IF emp_sal < 8000 AND hire_year >= 5
20         THEN UPDATE employees SET salary = salary + 500 WHERE employee_id = emp_id;
21     END IF;
22 END //
23 
24 DELIMITER ;

 

2.CASE WHEN

简单示例:

1.CASE... WHEN ... WHEN...类型:

 1 DELIMITER //
 2 CREATE PROCEDURE test_case()
 3 BEGIN
 4     #演示1:case ... when ...then ...
 5     declare var int default 2;
 6     
 7     case var
 8         when 1 then select 'var = 1';
 9         when 2 then select 'var = 2';
10         when 3 then select 'var = 3';
11         else select 'other value';
12     end case;
13 END //
14 DELIMITER;

基本结构 CASE 要判断的数据  WHEN 判断的数据应等于的数据  THEN SELECT 对应条件下的操作结果

                WHEN 判断的数据应等于的数据  THEN SELECT 对应条件下的操作结果

              ELSE SELECT 对应条件下的操作结果

    END CASE;

 

2.CASE WHEN... WHEN类型:

 1 DELIMITER //
 2 CREATE PROCEDURE test_case()
 3 BEGIN
 4     #演示2:case when ... then ....
 5     DECLARE var1 INT DEFAULT 10;
 6     CASE 
 7     WHEN var1 >= 100 THEN SELECT '三位数';
 8     WHEN var1 >= 10 THEN SELECT '两位数';
 9     ELSE SELECT '个数位';
10     END CASE;
11 
12 END //
13 
14 DELIMITER ;

基本结构 CASE WHEN 判断的条件  THEN SELECT 对应条件下的操作结果

        WHEN 判断的条件  THEN SELECT 对应条件下的操作结果

        ELSE SELECT 对应条件下的操作结果

    END CASE;

综合应用:

 1 #举例2:声明存储过程“update_salary_by_eid4”,定义IN参数emp_id,输入员工编号。
 2 #判断该员工薪资如果低于9000元,就更新薪资为9000元;薪资大于等于9000元且低于10000的,
 3 #但是奖金比例为NULL的,就更新奖金比例为0.01;其他的涨薪100元。
 4 
 5 DELIMITER //
 6 CREATE PROCEDURE update_salary_by_eid4(IN emp_id INT)
 7 BEGIN
 8     #局部变量的声明
 9     DECLARE emp_sal DOUBLE; #记录员工的工资
10     DECLARE bonus DOUBLE; #记录员工的奖金率
11     
12     #局部变量的赋值
13     SELECT salary INTO emp_sal FROM employees WHERE employee_id = emp_id;
14     SELECT commission_pct INTO bonus FROM employees WHERE employee_id = emp_id;
15     
16     CASE
17     WHEN emp_sal < 9000 THEN UPDATE employees SET salary = 9000 WHERE employee_id = emp_id;
18     WHEN emp_sal < 10000 AND bonus IS NULL THEN UPDATE employees SET commission_pct = 0.01 
19                             WHERE employee_id = emp_id;
20     ELSE UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
21     END CASE;
22     
23 
24 END //
25 
26 DELIMITER ;
 1 #举例3:声明存储过程update_salary_by_eid5,定义IN参数emp_id,输入员工编号。
 2 #判断该员工的入职年限,如果是0年,薪资涨50;如果是1年,薪资涨100;
 3 #如果是2年,薪资涨200;如果是3年,薪资涨300;如果是4年,薪资涨400;其他的涨薪500。
 4 
 5 DELIMITER //
 6 
 7 CREATE PROCEDURE update_salary_by_eid5(IN emp_id INT)
 8 BEGIN
 9     #声明局部变量
10     DECLARE hire_year INT; #记录员工入职公司的总时间(单位:年)
11     
12     #赋值
13     SELECT ROUND(DATEDIFF(CURDATE(),hire_date) / 365) INTO hire_year 
14     FROM employees WHERE employee_id = emp_id;
15     
16     #判断
17     CASE hire_year
18         WHEN 0 THEN UPDATE employees SET salary = salary + 50 WHERE employee_id = emp_id;
19         WHEN 1 THEN UPDATE employees SET salary = salary + 100 WHERE employee_id = emp_id;
20         WHEN 2 THEN UPDATE employees SET salary = salary + 200 WHERE employee_id = emp_id;
21         WHEN 3 THEN UPDATE employees SET salary = salary + 300 WHERE employee_id = emp_id;
22         WHEN 4 THEN UPDATE employees SET salary = salary + 400 WHERE employee_id = emp_id;
23         ELSE UPDATE employees SET salary = salary + 500 WHERE employee_id = emp_id;
24     END CASE;
25 END //
26 
27 DELIMITER ;

 

总结:无论是IF语句还是CASE语句,在结束时都不要忘记END IF/CASE;表示这个分支语句结构的结束

posted @ 2022-03-28 17:30  jue1e0  阅读(135)  评论(0)    收藏  举报