码迷,mamicode.com
首页 > 其他好文 > 详细

17 流程控制结构

时间:2021-05-24 12:45:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:情况   依次   控制   独立   bre   dep   while 循环   其他   大于   

流程控制结构

分类:

顺序结构:顺序从上往下依次执行

分支结构:程序从两条或多条路径中选择一条去执行

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

一、分支结构

1. if函数

功能:实现简单的双分支

语法:

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

执行顺序:

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

应用:任何地方

if 函数 if else 的效果

SELECT IF(10>5,‘大‘,‘小‘);

SELECT last_name,commission_pct,IF(commission_pct IS NULL,‘没奖金‘,‘有奖金‘)
FROM employees;

2. case结构

情况1:类似于java中的switch语句,一般用于实现的等值判断

语法:

? CASE 变量|表达式|字段

? WHEN 要判断的值 THEN 返回的值1【或语句1;】

? WHEN 要判断的值 THEN 返回的值2【或语句2;】

? ...

? ELSE 返回的值N 【或语句n;】

? END【CASE;】

/*案例:查询员工的工资 ,要求
   部门号=30,显示的工资为1.1倍	
   部门号=40,显示的工资为1.2倍	
   部门号=50,显示的工资为1.3倍	
   其他部门,显示的工资为原工资
*/ 
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;


情况2:类似于java中的多重if语句,一般用于实现区间判断

? CASE

? WHEN 要判断的条件1 THEN 返回的值1【或语句1;】

? WHEN 要判断的条件2 THEN 返回的值2【或语句2;】

? ...

? ELSE 返回的值N【或语句2;】

? END【CASE;】

/*
查询:员工的工资情况吧
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别
*/

SELECT salary,
CASE 
WHEN salary > 20000 THEN ‘A‘
WHEN salary > 15000 THEN ‘B‘
WHEN salary > 10000 THEN ‘C‘
ELSE ‘D‘
END AS 工资级别
FROM employees;

#创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩90-700,显示A
CREATE PROCEDURE test_case(IN score INT)
BEGIN
	CASE 
	WHEN score >= 100 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 test_case(95);

特点:

①可以作为表达式;嵌套在其他语句中,可以放在任何地方,BEGIN END 中 或BEGIN END 的外面

可以作为独立的语句去使用,只能放在在BEGIN END 中

②如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE

如果都不满足,则执行ELSE中的语句或值

③ELSE 可以省略,如果ELSE 省略了,并且所有WHEN条件都不满足,则返回NULL

3. if结构

功能:实现多重分支

IF 条件1 THEN 语句1;
ELSEIF 条件2 THEN 语句2;
...
【ELSE 语句n;】
END IF;

#创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩90-700,显示A
CREATE PROCEDURE test_if(IN score INT)
BEGIN
	IF score >= 100 AND score<=100 THEN RETURN ‘A‘;
	ELSEIF score >= 80 THEN RETURN ‘B‘;
	ELSEIF score >= 80 THEN RETURN ‘C‘;
	ELSE RETURN ‘D‘;
	END IF;
END

应用场合:应用在begin end中

二、循环结构

分类:

while、loop、repeat

循环控制:

iterate 类似于 continue,结束本次循环,继续下一次

leave 类似于 break 跳出,结束当前所在的循环

对比:

①这三种循环可以省略名称,但如果循环中添加了循环控制语句(leave或 iterate)则必须添加名称

②loop一般用于实现简单的死循环

? while 先判断后执行

? repeat 先执行后判断,无条件至少执行一次

1. while

语法:

【标签:】WHILE 循环条件 DO 
	循环体;
END WHILE 【标签】;


#案例:批量插入,根据次数插入到admin表中多条记录
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN	
	DECLARE i INT DEFAULT 1;
	WHILE i<=insertCount DO
		INSERT INTO admin(username,`password`) VALUES(CONCAT(‘rose‘,i),‘666‘);
		SET i=i+1;
	END WHILE ;
END $
CALL pro_while(100)$ 

#2.添加leave语句,根据次数插入到admin表中多条记录
#如果次数大于20,则停止
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN	
	DECLARE i INT DEFAULT 1;
	a:WHILE i<=insertCount DO
		INSERT INTO admin(username,`password`) VALUES(CONCAT(‘rose‘,i),‘666‘);
		IF i>=20 THEN LEAVE a;
		END IF;
		SET i=i+1;
	END WHILE a;
END $
CALL pro_while(100)$ 

#3.添加iterate语句,
#根据次数插入到admin表中多条记录,只出入偶数次
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN	
	DECLARE i INT DEFAULT 0;
	a:WHILE i<=insertCount DO
		SET i=i+1;
		IF MOD(i,2)!=0 THEN ITERATE a;
		END IF;
		INSERT INTO admin(username,`password`) VALUES(CONCAT(‘rose‘,i),‘666‘);
	END WHILE a;
END $
CALL pro_while(100)$ 

2. loop

语法:

【标签:】LOOP 
	循环体;
END LOOP【标签】;

可以用来模拟简单的死循环

3. repeat

语法:

【标签:】REPEAT
	循环体;
UNTIL 结束循环的条件
END REPEAT【标签】;

先执行后判断

17 流程控制结构

标签:情况   依次   控制   独立   bre   dep   while 循环   其他   大于   

原文地址:https://www.cnblogs.com/flypigggg/p/14773973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!