小白终是踏上了这条不归路----小文的mysql学习笔记(23)---------流程控制结构

小白终是踏上了这条不归路----小文的mysql学习笔记(23)---------流程控制结构

**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)

小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询

小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查

小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数

小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询 … **
流程控制结构主要一共有三种:

顺序结构: 程序从上往下依次执行 循环结构: 程序在满足一定条件的基础上,重复执行一段代码

一、分支结构

1、if函数

语法: IF(表达式1,表达式2,表达式3);

ps:一般和其他的语句如 select、等一起使用

解释: 如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值

作用: 可以实现简单的双分支。

当然下面我们举一个简单的例子,只是演示一下if函数,

举例: 当然这里2>3 显然是不正确的,所以输出表达式3‘错误’。
在这里插入图片描述

2、case结构

特点:          2、它也可以作为独立的语句去使用,但只能放在BEGIN END中。          4、ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL

case结构一共有两种情况 ,下面我们来分别说一说

(1)case 函数的使用一: switch case 的效果类似于java中的switch语句,一般用于实现等值判断。

        语法case 要判断的字段或表达式                     When 常量2 then 要显示的值2或语句;                     else 要显示的值n或语句;
                    end case;

(2)、case函数的使用二: 类似于多重if。一般用于实现区间判断

         语法case                     When 条件2 then 要显示的值2或语句2;                    else 要显示的值n或语句n;
                   end case;

那么下面我们简单的举一个例子

例: 创建存储过程,根据传入的工资,来返回等级, 如果工资>10000,显示为c级别;否则显示为D级别 那么我们来调用一下:我们输入工资12500。 明显返回了等级为C级。

3、if结构

语法:       if 条件1   then   语句1;                   … …                   end   if

那么下面我们来举一个简单的 例子: 在这里插入图片描述 在这里插入图片描述

二、循环结构

一共有三种: while 、loop 、repeat

流程控制:

iterate 类似于continue, 继续,结束本次循环,继续下一次。
leave 类似于 break,跳出,结束当前所在的循环。

注意: 别名;当我们要添加流程控制语句时必须,先给我们的循环取别名;如果不加循环控制语句,那么可以不用取别名

1、while

ps:先判断后执行。

语法:                                             循环体;
            end while 【别名】;

那么下面我们来分别举一下例子:

(1)没有添加循环控制语句 在这里插入图片描述 在这里插入图片描述

(2)添加流程控制leave语句

案例: 批量插入,根据输入的次数插入数据到admin表,但是一旦条数>15,则立刻终止 调用:我们试着输入20次,但是大于了十五直接终止,所以只会插入15条数据 (3)添加流程控制iterate语句 在这里插入图片描述 在这里插入图片描述

2、loop

ps:它没有内置的循环条件,但是可以通过添加leave语句来跳出循环

语法:                           循环体;
              end loop 【别名】;

ps:一般用来模拟死循环

3、repeat

ps:先执行,后判断。

语法:                               循环体;               end repeat 【别名】;

那么我们简单的做个例子:同样是根据输入次数,批量插入表中多条数据

DELIMITER $
CREATE PROCEDURE a1(IN insertcount INT)
BEGIN
      DECLARE i INT DEFAULT 0;

        REPEAT  
       INSERT INTO admin(username,`password`) VALUES(CONCAT('小文+',i),'6666');      
        SET i=i+1;

       UNTIL i>=insertcount       
       END REPEAT;
END $

我们来调用:插入五条,然后我们来查询数据,你会发现有一个区别:如果你上面设置变量和之前的while循环一样设置为1的话就会少插入一次,所以我们起初设置变量i初始值要设为0.才能达到和while一样的效果。 在这里插入图片描述

补充:

rand() 函数
含义: 返回一个随机的浮点值;即随即返回一个0到1之间的数,不包括临界值

简单的做一个例子来理解它 在这里插入图片描述 在这里插入图片描述

那么下面我们简单的做一个有关循环控制的案例:

创建一个存储过程,实现向该表插入指定个数的随机长度的有序字符串 在这里插入图片描述
然后下面在该表中创建存储过程

DELIMITER $
CREATE PROCEDURE tx(IN insertcount INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE str VARCHAR(30) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
    DECLARE start_a INT DEFAULT 1;
    DECLARE end_a INT DEFAULT 1;

     WHILE i<=insertcount DO

        SET start_a=FLOOR(RAND()*26+1);
        SET end_a=FLOOR(RAND()*(27-start_a)+1);

       INSERT INTO ac(shzu) VALUES(SUBSTRING(str,start_a,end_a));   
       SET i=i+1; 
    END WHILE;
END $

那我们简单的调用,输入数字5 并且查询ac表,你会发现这,的确是随机插入的五条有序的随机字符串
在这里插入图片描述

                                                    --------别慌,月亮也在大海某处迷茫。

posted @ 2020-12-30 11:37  刘桓湚  阅读(162)  评论(0编辑  收藏  举报