zoukankan      html  css  js  c++  java
  • 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 BEGIN
    21     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-01'
    12 )AUTO_INCREMENT=1001;
    13 
    14 
    15 
    16 
    17 DELIMITER //
    18 CREATE PROCEDURE p_addsalary(IN v_empno INT)
    19 BEGIN
    20     DECLARE addS int;
    21     CASE v_empno
    22     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-01'
    45 )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 BEGIN
    23     DECLARE maxempno int DEFAULT 0;
    24     DECLARE i int DEFAULT 1;
    25     WHILE i<= 1000 DO
    26     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 DO
    14         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 BEGIN
    31 
    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 DO
    37         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     REPEAT
    12         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>maxempno
    16     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:loop
    12         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语句测试
    这都是我对自己学习过程的理解,如有错误请指出!我算一个小白了。
  • 相关阅读:
    Flask安装教程
    Django进阶(2)
    反编译源码
    Jmeter之Bean shell使用(一)
    接口测试基础(fiddler、postman的使用、python实现测试接口程序)
    Fiddler显示服务器IP的方法
    web测试与app测试的区别
    互联网产品接入支付功能如何测试?
    web测试中的测试点和测试方法总结
    使用JMeter建立接口测试
  • 原文地址:https://www.cnblogs.com/darwinli/p/9032828.html
Copyright © 2011-2022 走看看