zoukankan      html  css  js  c++  java
  • 【DataBase】MySQL 28 流程控制

    一、分支结构

    1、IF函数

    语法:

    IF(表达式1, 表达式2, 表达式3)  

    类似三元运算符,表达式1返回True Or False

    True执行表达式2,False执行表达式3

    IF实现多分枝结构

    IF 条件 THEN 语句;
    ELSEIF 条件 THEN 语句;
    ELSEIF 条件 THEN 语句;
    ... ...
    ELSE 语句;
    END IF;
    

    只能应用在BEGIN & END 中

    2、CASE结构

    用于等值判断处理,也可以多判断处理

    CASE 变量、字段、函数、表达式
    WHEN 要判断的值1 THEN 返回值1或者语句 WHEN 要判断的值2 THEN 返回值2或者语句 WHEN 要判断的值3 THEN 返回值3或者语句 ... ... ELSE 返回值N或者语句
    END

    不是等值判断,以条件判断的语法:

    CASE 
    
    WHEN 条件1 THEN 返回值1或者语句
    WHEN 条件2 THEN 返回值2或者语句
    WHEN 条件3 THEN 返回值3或者语句
    ... ...
    ELSE 返回值N或者语句
    
    END
    

    二、分支案例:

    成绩分级

    DELIMITER $
    
    CREATE PROCEDURE scoreCase(IN score INT);
    BEGIN
    	CASE
    	WHEN score >= 90 AND score <= 100 THEN SELECT 'A';
    	WHEN score >= 80 THEN SELECT 'B';
    	WHEN score >= 60 THEN SELECT 'C';
    	ELSE SELECT 'D';
    	END CASE;
    END $

    调用

    CALL scoreCase(77);

    使用多重IF

    DELIMITER $
    
    CREATE FUNCTION scoreByIf(score INT) RETURNS CHAR
    BEGIN
    	IF score >= 90 AND score <= 100 THEN RETURN 'A';
    	ELSEIF score >= 80 THEN RETURN 'B';
    	ELSEIF score >= 60 THEN RETURN 'C';
    	ELSE RETURN 'D';
    	END IF;
    END $

    调用

    SELECT scoreByIf(80) 

    三、循环结构

    三种循环类型:

    WHILE、LOOP、REPEAT

    循环控制:

    iterate == continue 继续,结束本次循环,进入下一次循环
    leave == break ,跳出当前的循环

    WHILE语法:

    [标签 :] WHILE 循环条件 DO
        循环体内的逻辑
    END WHILE [标签];
    

    LOOP语法:

    [标签 :] LOOP 
        循环体内的逻辑
    END LOOP[标签];

    REPEAT语法:

    [标签 :] REPEAT
        循环体内的逻辑
    UTIL 结束循环的条件
    END REPEAT [标签];

    四、循环案例:

    批量插入ADMIN表中

    DELIMITER $;
    CREATE PROCEDURE batchByWhile(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	WHILE i <= insertCount DO
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    		SET i = i + 1;
    	END WHILE;
    END 

    调用

    CALL batchByWhile(777);

     带标签的处理:

    TRUNCATE admin;
    
    DELIMITER $;
    CREATE PROCEDURE batchByWhile2(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	r1:WHILE i <= insertCount DO
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    		IF i >= 30 THEN LEAVE r1;
    		END IF;
    		SET i = i + 1;
    	END WHILE r1;
    END $

    调用:

    CALL batchByWhile2(100);
    

    使用迭代处理:

    DELIMITER $;
    CREATE PROCEDURE batchByWhile3(IN insertCount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	
    	r1:WHILE i <= insertCount DO
    		SET i = i + 1;
    		IF MOD(i, 2) != 0 THEN ITERATE r1;
    		END IF;
    		INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
    	END WHILE r1;
    END $

    调用

    CALL batchByWhile3(222);
    
  • 相关阅读:
    洛谷 P2197 nim游戏
    洛谷 P1168 中位数
    第十一次发博不知道用什么标题好
    第十次发博不知道用什么标题好
    第九次发博不知道用什么标题好
    第八次发博不知道用什么标题好
    第七次发博不知道用什么标题好
    第六次发博不知道用什么标题好
    第五次发博不知道用什么标题好
    第四次发博不知道用什么标题好
  • 原文地址:https://www.cnblogs.com/mindzone/p/13924710.html
Copyright © 2011-2022 走看看