MYSQL进阶学习笔记三:MySQL流程控制语句!(视频序号:进阶_7-10)

知识点四:MySQL流程控制语句(7-10)

选择语句:

  (IF ELSE ELSE IF CASE 分支)IFNULL函数

    IF语法:

        语法规则:

            IF search_condition THEN statmen_list ;

                [SLSEIF search_condition THEN statmen_list];

                ELSE statmen_list;

                END IF;


 1 --7 流程控制语句之选择语句 2 DELIMITER // 3 CREATE PROCEDURE p_test7(IN age INT) 4 BEGIN 5 IF age >=18 THEN SELECT 成年人; 6 ELSE SELECT 未成年人; 7 END IF; 8 END  9 //10 11 DELIMITER ;12 SET @age =4;13 CALL p_test7(@age);14 15 SELECT @age;16 17 18 DELIMITER //19 CREATE PROCEDURE p_test8(IN age INT)20 BEGIN21 IF age >=18 AND age < 60 THEN SELECT 成年人;22 ELSEIF age >= 60 THEN SELECT 老年人;23 ELSE SELECT 未成年人;24 END IF;25 END 26 //27 28 DELIMITER ;29 SET @age =60;30 CALL p_test8(@age);31 32 SELECT @age;

IF语句测试

    CASE语法

        CASE语句也用来进行条件判断,其可以实现比IF语句更复杂的条件判断。

        CASE语法的基本形势如下:
            CASE case_value

                WHEN when_value THEN statement_list;

                [WHEN when_value THEN statement_list];…;

                [ELSE statement_list];

            END CASE;


 1 --8 流程控制语句之选择语句CASE分支 2  3 --默认数据(创建工资表) 4 CREATE DATABASE mzjj; 5 USE mzjj; 6  7 CREATE TABLE salaries( 8 emp_no INT KEY NOT NULL AUTO_INCREMENT, 9 salary INT,10 from_data DATE DEFAULT 2015-04-01,11 to_data DATE DEFAULT 2015-05-0112 )AUTO_INCREMENT=1001;13 14 15 16 17 DELIMITER //18 CREATE PROCEDURE p_addsalary(IN v_empno INT)19 BEGIN20 DECLARE addS int;21 CASE v_empno22 WHEN 1001 THEN SET addS = 1500;23 WHEN 1002 THEN SET addS = 2500;24 WHEN 1003 THEN SET addS = 3500;25 ELSE SET adds =1000;26 END CASE;27 UPDATE salaries SET salary = addS WHERE emp_no= v_empno;28 END 29 //30 31 DELIMITER ;32 SET @v_empno =1001;33 CALL p_addsalary(@v_empno);34 35 SELECT @v_empno;36 37 --默认数据(创建员工信息表)38 CREATE TABLE employees(39 emp_no INT KEY NOT NULL AUTO_INCREMENT,40 birth_data DATE DEFAULT 2015-04-01,41 first_name VARCHAR(20),42 last_name VARCHAR(20),43 gender ENUM(M,F),44 hire_data DATE DEFAULT 2015-05-0145 )AUTO_INCREMENT=1001;46 47 SELECT emp_no,first_name,last_name,48 (CASE gender WHEN M THEN ELSE  END) AS 性别 FROM employees;

CASE语句测试

   IFNULL函数:

        用法:
            IFNULL(exp1,exp2)

                如果exp1是NULL则返回exp2;否则返回exp1;

        示例:
            SELECT IFNULL(null,‘不是空‘);

            SELECT IFNULL(123,‘不是空‘);


1 --测试IFNULL函数2 UPDATE employees SET first_name=NULL WHERE emp_no =1001;3 SELECT IFNULL(first_name,无名字) FROM employees;

IFNULL函数测试

 

循环语句:

    WHILE语句:

        语法规则:

            WHILE 条件 DO

                内容

            END WHILE;


 1 --9 流程控制(WHILE循环语句) 2 --计算1加到100 3 DELIMITER // 4 CREATE PROCEDURE p_addnum() 5 BEGIN 6 DECLARE i int DEFAULT 1; 7 DECLARE addresult int DEFAULT 0; 8 WHILE i<= 100 DO 9 SET addresult = addresult +i;10 SET i = i+1;11 END WHILE;12 SELECT addresult;13 END 14 //15 16 DELIMITER ;17 CALL p_addnum();18 19 --向表中加入1000条数据20 DELIMITER //21 CREATE PROCEDURE p_insertEmp()22 BEGIN23 DECLARE maxempno int DEFAULT 0;24 DECLARE i int DEFAULT 1;25 WHILE i<= 1000 DO26 SELECT MAX(emp_no) into maxempno FROM employees;27 SET maxempno = maxempno+1;28 INSERT INTO employees(emp_no,birth_data, first_name,last_name, gender,hire_data)29 VALUES(maxempno,1990-1-1,jim,ju,M,2000-1-1);30 SET i =i+1;31 END WHILE;32 END 33 //34 35 DELIMITER ;36 CALL p_insertEmp();

WHILE语句测试

 1 --任务作业 2 --更新编号为偶数的gender字段为M 3  4 DELIMITER // 5 CREATE PROCEDURE changeEmp() 6 BEGIN 7  8 DECLARE maxempno int DEFAULT 0; 9 DECLARE sex VARCHAR(2) DEFAULT M;10 DECLARE minempno int DEFAULT 1;11 SELECT MAX(emp_no) into maxempno FROM employees;12 SELECT MIN(emp_no) into minempno FROM employees;13 WHILE minempno <= maxempno DO14 CASE minempno%2 15 WHEN 0 THEN SET sex = M;16 ELSE SET sex = M;17 END CASE;18 UPDATE employees SET gender = sex WHERE emp_no= minempno;19 SET minempno =minempno+1 ;20 END WHILE;21 END 22 //23 DELIMITER ;24 CALL changeEmp();25 26 SELECT * FROM employees;27 28 DELIMITER //29 CREATE PROCEDURE changeEmp2()30 BEGIN31 32 DECLARE maxempno int DEFAULT 0;33 DECLARE minempno int DEFAULT 1;34 SELECT MAX(emp_no) into maxempno FROM employees;35 SELECT MIN(emp_no) into minempno FROM employees;36 WHILE minempno <= maxempno DO37 IF minempno%2=0 THEN UPDATE employees SET gender = F WHERE emp_no= minempno;38 END IF;39 SET minempno =minempno+1 ;40 END WHILE;41 END 42 //43 DELIMITER ;44 CALL changeEmp2();

任务作业

   REPEAT语句:

        语法规则:

            REPEAT

                内容

                UNTIL 条件   //推出循环的条件

            END REPEAT;


 1 --rapeat测试 2 DELIMITER // 3 CREATE PROCEDURE changeEmp1() 4 BEGIN 5  6 DECLARE maxempno int DEFAULT 0; 7 DECLARE sex VARCHAR(2) DEFAULT M; 8 DECLARE minempno int DEFAULT 1; 9 SELECT MAX(emp_no) into maxempno FROM employees;10 SELECT MIN(emp_no) into minempno FROM employees;11  REPEAT12 if minempno%2 =0 then update employees SET gender=F WHERE emp_no = minempno;13 END IF;14 SET minempno = minempno+1;15 UNTIL minempno>maxempno16 END REPEAT;17 END 18 //19 DELIMITER ;20 CALL changeEmp1();

REPEAT语句测试

    LOOP语句:

        语法规则:

            LOOP名字:LOOP

                内容

                IF 条件 THEN

                LEAVE LOOP名字;

                END IF;

            END LOOP;


 1 --loop测试 2 DELIMITER // 3 CREATE PROCEDURE changeEmp3() 4  5 BEGIN 6 DECLARE maxempno int DEFAULT 0; 7 DECLARE minempno int DEFAULT 1; 8 SELECT MAX(emp_no) into maxempno FROM employees; 9 SELECT MIN(emp_no) into minempno FROM employees;10 11  myloop:loop12 if minempno%2 =1 then update employees SET hire_data=1900-12-11 WHERE emp_no = minempno;13 END IF;14 SET minempno = minempno+1;15 IF minempno>maxempno THEN LEAVE myloop;16 END IF;17 END loop;18 END 19 //20 21 DELIMITER ;22 CALL changeEmp3();

LOOP语句测试

 

相关文章