标签:情况 依次 控制 独立 bre dep while 循环 其他 大于
分类:
顺序结构:顺序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码
功能:实现简单的双分支
语法:
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;
情况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
功能:实现多重分支
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 先执行后判断,无条件至少执行一次
语法:
【标签:】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)$
语法:
【标签:】LOOP
循环体;
END LOOP【标签】;
可以用来模拟简单的死循环
语法:
【标签:】REPEAT
循环体;
UNTIL 结束循环的条件
END REPEAT【标签】;
先执行后判断
标签:情况 依次 控制 独立 bre dep while 循环 其他 大于
原文地址:https://www.cnblogs.com/flypigggg/p/14773973.html