**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)
小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询
小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查
小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数
小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询
…
…
小白终是踏上了这条不归路----小文的mysql学习笔记(目录)
**
流程控制结构主要一共有三种:
顺序结构: 程序从上往下依次执行
分支结构: 程序从两条或多条路径中选择一条去执行
循环结构: 程序在满足一定条件的基础上,重复执行一段代码
语法: IF(表达式1,表达式2,表达式3);
ps:一般和其他的语句如 select、等一起使用
解释: 如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
作用: 可以实现简单的双分支。
当然下面我们举一个简单的例子,只是演示一下if函数,
举例: 当然这里2>3 显然是不正确的,所以输出表达式3‘错误’。
特点:
1、它可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END中或BEGIN END的外面;
2、它也可以作为独立的语句去使用,但只能放在BEGIN END中。
3、如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE,如果都不满足,则执行ELSE中的语句或值.
4、ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL
case结构一共有两种情况 ,下面我们来分别说一说
(1)case 函数的使用一: switch case 的效果类似于java中的switch语句,一般用于实现等值判断。
语法: case 要判断的字段或表达式
When 常量1 then 要显示的值1或语句;
When 常量2 then 要显示的值2或语句;
………
else 要显示的值n或语句;
end case;
(2)、case函数的使用二: 类似于多重if。一般用于实现区间判断
语法:case
When 条件1 then 要显示的值1或语句1;
When 条件2 then 要显示的值2或语句2;
……
else 要显示的值n或语句n;
end case;
那么下面我们简单的举一个例子
例: 创建存储过程,根据传入的工资,来返回等级,
要求如果工资>=20000,显示为A级别;如果工资>15000,显示为B级别;
如果工资>10000,显示为c级别;否则显示为D级别
那么我们来调用一下:我们输入工资12500。
明显返回了等级为C级。
语法: if 条件1 then 语句1;
elseif 条件2 then 语句2;
… …
【else 语句n】
end if
那么下面我们来举一个简单的 例子:
根据传入的成绩,来显示等级,比如传入的成绩: 90-100, 返回A,80-90, 返回B,60-80, 返回C,否则,返回D。
调用:我们举例输入66分,返回等级为c等级
一共有三种: while 、loop 、repeat
流程控制:
iterate 类似于continue, 继续,结束本次循环,继续下一次。
leave 类似于 break,跳出,结束当前所在的循环。
注意: 别名;当我们要添加流程控制语句时必须,先给我们的循环取别名;如果不加循环控制语句,那么可以不用取别名
ps:先判断后执行。
语法:
【别名:】 while 循环条件 do
循环体;
end while 【别名】;
那么下面我们来分别举一下例子:
(1)没有添加循环控制语句
批量插入,根据输入的次数,来决定插入多少条记录到我们的admin表
我们调用 call in_while(66)$ 插入66个德玛,都是以及插入了的
(2)添加流程控制leave语句
案例: 批量插入,根据输入的次数插入数据到admin表,但是一旦条数>15,则立刻终止
调用:我们试着输入20次,但是大于了十五直接终止,所以只会插入15条数据
(3)添加流程控制iterate语句
案例:批量插入,根据插入次数插入到admin表中多条记录,只有5的倍数才会被插入。
调用:我们输入次数100,那么符合条件的应该就有20次,so会插入20条数据
ps:它没有内置的循环条件,但是可以通过添加leave语句来跳出循环
语法:
【别名:】loop
循环体;
end loop 【别名】;
ps:一般用来模拟死循环
ps:先执行,后判断。
语法:
【别名:】 repeat
循环体;
until 结束循环的条件
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一样的效果。
因为该repeat循环是先执行一次再看是否满足条件
补充:
rand() 函数
含义: 返回一个随机的浮点值;即随即返回一个0到1之间的数,不包括临界值
简单的做一个例子来理解它
首先我们来看看我们刚刚admin表中的所有信息,一共二十个嘛,
然后我们举个栗子:查询admin表中 随机五条信息
那么下面我们简单的做一个有关循环控制的案例:
创建一个存储过程,实现向该表插入指定个数的随机长度的有序字符串
首先我们先创建一个ac表
然后下面在该表中创建存储过程
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表,你会发现这,的确是随机插入的五条有序的随机字符串
**
Don`t panic. The moon is lost somewhere in the sea.
--------别慌,月亮也在大海某处迷茫。