基础的坑终于补完了
#流程控制结构
/*
顺序结构:程序从上往下次依执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码
*/
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#一、分支结构
-- ------------------------------------------------------------------*******
#1、if函数
/*
功能:实现简单的双分支结构
语法:
if(表达式1,表达式2,表达式3)
执行顺序:如果表达式1成立,返回表达式2,否则返回表达式3
应用场景:SQL语句任何地方
*/
-- ------------------------------------------------------------------*******
#2、case结构
/*
情况1:用于做等值判断
语法:
case 变量|表达式|字段
when 要判断是值 then 返回的值【或语句;】
。。。
else 返回的值【或语句;】
end【case;】
情况2:用于做区间判断
语法:
case
when 要判断是条件 then 返回的值【或语句;】
。。。
else 返回的值【或语句;】
end【case;】
特点:
1、可以作为表达式,嵌套在其他语句中使用,放在任何地方(begin end中或外面)
也可以作为独立的语句,只能放在begin end中
2、执行顺序:执行when ,返回then,跳出结束Case,不满足再执行下一条when ......
都不满足,执行else,跳出、结束
3、如果else省略了,所有when 都不满足时,返回null
*/
-- --------------------------------------------------------
#案例、创建存储过程,根据传入的成绩,显示等级(A:90~100,B:80~90,C:60~80,D:60以下
DELIMITER $
CREATE PROCEDURE myp1(IN score INT)
BEGIN
CASE
WHEN score >= 90 AND score <= 100 THEN SELECT'A';
WHEN score > 79 THEN SELECT 'B';
WHEN score > 59 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END$
CALL myp1(98)$
-- ------------------------------------------------------------------*******
#3、if结构
/*
功能:实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
【else 条件n;】
end if;
应用:用在begin end中
*/
-- --------------------------------------------------------
#案例、根据传入的成绩,返回等级(A:90~100,B:80~90,C:60~80,D:60以下
CREATE FUNCTION myf1(score INT) RETURNS CHAR
BEGIN
IF score >=90 AND score<=100 THEN RETURN 'A';
ELSEIF score>79 THEN RETURN 'B';
ELSEIF score>59 THEN RETURN 'C';
ELSE RETURN'D';
END IF;
END$
SELECT myf1(67) AS 等级$
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#二、循环结构
/*
分类:while、loop、repeat
循环控制:
iterate :结束当前循环,执行下一次,相当于Python的continue
leave :跳出循环,相当与Python中的break
*/
-- ------------------------------------------------------------------*******
#1、while
/*
语法:
【标签:】while 循环条件 do
循环体;
end while【标签】;
注意:标签是搭配循环控制语句来用的
*/
#流程控制结构
/*
顺序结构:程序从上往下次依执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码
*/
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#一、分支结构
-- ------------------------------------------------------------------*******
#1、if函数
/*
功能:实现简单的双分支结构
语法:
if(表达式1,表达式2,表达式3)
执行顺序:如果表达式1成立,返回表达式2,否则返回表达式3
应用场景:SQL语句任何地方
*/
-- ------------------------------------------------------------------*******
#2、case结构
/*
情况1:用于做等值判断
语法:
case 变量|表达式|字段
when 要判断是值 then 返回的值【或语句;】
。。。
else 返回的值【或语句;】
end【case;】
情况2:用于做区间判断
语法:
case
when 要判断是条件 then 返回的值【或语句;】
。。。
else 返回的值【或语句;】
end【case;】
特点:
1、可以作为表达式,嵌套在其他语句中使用,放在任何地方(begin end中或外面)
也可以作为独立的语句,只能放在begin end中
2、执行顺序:执行when ,返回then,跳出结束Case,不满足再执行下一条when ......
都不满足,执行else,跳出、结束
3、如果else省略了,所有when 都不满足时,返回null
*/
-- --------------------------------------------------------
#案例、创建存储过程,根据传入的成绩,显示等级(A:90~100,B:80~90,C:60~80,D:60以下
DELIMITER $
CREATE PROCEDURE myp1(IN score INT)
BEGIN
CASE
WHEN score >= 90 AND score <= 100 THEN SELECT'A';
WHEN score > 79 THEN SELECT 'B';
WHEN score > 59 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END$
CALL myp1(98)$
-- ------------------------------------------------------------------*******
#3、if结构
/*
功能:实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
【else 条件n;】
end if;
应用:用在begin end中
*/
-- --------------------------------------------------------
#案例、根据传入的成绩,返回等级(A:90~100,B:80~90,C:60~80,D:60以下
CREATE FUNCTION myf1(score INT) RETURNS CHAR
BEGIN
IF score >=90 AND score<=100 THEN RETURN 'A';
ELSEIF score>79 THEN RETURN 'B';
ELSEIF score>59 THEN RETURN 'C';
ELSE RETURN'D';
END IF;
END$
SELECT myf1(67) AS 等级$
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#二、循环结构
/*
分类:while、loop、repeat
循环控制:
iterate :结束当前循环,执行下一次,相当于Python的continue
leave :跳出循环,相当与Python中的break
*/
-- ------------------------------------------------------------------*******
#1、while
/*
语法:
【标签:】while 循环条件 do
循环体;
end while【标签】;
注意:标签是搭配循环控制语句来用的
*/
-- -------------------不加循环控制-------------------------------------
#案例1、在admin表中插入N条记录
CREATE PROCEDURE myp0(IN n INT)
BEGIN
DECLARE i INT DEFAULT 1;
A:WHILE i<=n DO
INSERT INTO admin(`username`,`password`)
VALUES(CONCAT('潘花花',i),'000');
SET i=i+1;
END WHILE A;
END$
CALL myp0(50)$
-- ----------------------添加循环控制---leave-------------------------------
#案例2、在admin表中插入N条记录,如果>20,停止循环
CREATE PROCEDURE mypw2(IN n INT)
BEGIN
DECLARE i INT DEFAULT 0;
A:WHILE i<n DO
INSERT INTO admin(`username`,`password`)
VALUES(CONCAT('潘花花',i),'111');
IF i>=20 THEN LEAVE A;
END IF;
SET i=i+1;
END WHILE A;
END$
CALL mypw2(100)$
-- ----------------------添加循环控制---iterate------------------------------
#案例3、在admin表中插入N条记录,只插入偶数次
CREATE PROCEDURE mypw3(IN n INT)
BEGIN
DECLARE i INT DEFAULT 0;
A:WHILE i<n DO
SET i=i+1;
IF i%2 =1 THEN ITERATE A;
END IF;
INSERT INTO admin(username,`password`)
VALUES (CONCAT('花花',i),'222');
END WHILE A;
END$
CALL mypw3(10)$
DELETE FROM admin WHERE id>10$
SELECT * FROM admin$
DROP PROCEDURE mypw3$
-- ------------------------------------------------------------------*******
#2、loop
/*
语法:
【标签:】loop
循环体;
end loop【标签】
注意:可以模仿简单的死循环
*/
-- ------------------------------------------------------------------*******
#3、repeat
/*
语法:
【标签:】repeat
循环体;
until 循环结束的条件
end repeat【标签】;
*/