当前位置: 首页 > news >正文

MySQL——流程控制

一、IF条件语句

语法

IF condition THENstatements;
ELSEIF condition THENstatements;
ELSEstatements;
END IF;

判断成绩等级

# 判断成绩等级
# 输入学生的编号,取出学生的第一门课,然后判断当前的课程的等级
drop procedure if exists p2;
delimiter $$
create procedure p2(in stuId int)
begin-- 定义局部变量declare myScore double default 0.0;declare myCname varchar(20);-- 查询学生的成绩select score,cname into myScore,myCnamefrom v4 where sid=stuIdorder by score desclimit 1;-- 根据局部变量做判断if myScore>80 thenselect concat(myCname,'A') 课程情况;elseif myScore<80 and myScore>60 thenselect concat(myCname,'B') 课程情况;elseselect concat(myCname,'C') 课程情况;end if;
end$$
delimiter ;
​
-- 调用存储过程
call p2(2);
调用SET @grade = '';
CALL a1(85.5, @grade);
SELECT @grade AS '成绩等级';
​
SET @grade = '';
CALL a1(59.5, @grade);
SELECT @grade AS '成绩等级';

二、CASE条件语句

CASE XWHEN condition1 THEN statements1WHEN condition2 THEN statements2...ELSE statements
END CASE;

根据性别返回称呼

特性DECLARESET
用途声明变量并定义类型为已声明的变量赋值
位置BEGIN...END块开始,其他语句之前变量声明后的任意位置
语法DECLARE 变量名 数据类型 [DEFAULT 默认值];SET 变量名 = 值;
作用域局部(当前块内)可操作局部变量和会话变量
功能限制只能声明变量只能赋值,不能创建变量
drop procedure if exists p3;
delimiter $$
create procedure p3(in stuId int)
begin-- 定义名字和性别declare name varchar(20);declare gender varchar(20);-- 查询select sname,ssex into name,genderfrom t_student where sid=stuId;-- 使用判断case genderwhen '男' thenset gender = '小伙子';when '女' thenset gender = '小姑娘';elseset gender = '妖怪';end case;-- 输出select name,gender;
end$$
delimiter ;
调用SET @title = '';
CALL a2(1001, @title);
SELECT @title AS '称呼';
​
SET @title = '';
CALL a2(1003, @title);
SELECT @title AS '称呼';

三、LOOP循环语句

[loop_label:] LOOPstatements;IF condition THENLEAVE [loop_label];END IF;
END LOOP [loop_label];

计算阶乘

DELIMITER //
CREATE PROCEDURE a3(IN p_num INT, OUT p_result INT)
BEGINDECLARE i INT DEFAULT 1;SET p_result = 1;my_loop: LOOPSET p_result = p_result * i;SET i = i + 1;IF i > p_num THENLEAVE my_loop;END IF;END LOOP my_loop;
END //
DELIMITER ;
调用SET @result = 0;
CALL a3(5, @result);
SELECT @result AS '5的阶乘';
​
SET @result = 0;
CALL a3(3, @result);
SELECT @result AS '3的阶乘';

四、WHILE循环语句

[while_label:] WHILE condition DOstatements;
END WHILE [while_label];

打印数字

DELIMITER //
CREATE PROCEDURE a4(IN p_max INT)
BEGINDECLARE i INT DEFAULT 1;WHILE i <= p_max DOSELECT i AS '当前数字';SET i = i + 1;END WHILE;
END //
DELIMITER ;
调用CALL a4(3);

计算平均分

drop procedure if exists p6;
delimiter $$
create procedure p6()
begindeclare ns varchar(10) default '一二三四五六七八九十';declare name_length int default 2;declare name varchar(10) default '';declare idx int default 0;while char_length(name) < name_lengthdoset idx = floor(char_length(ns) * rand());set name = concat(name, substring(ns, idx, idx + 1));end while;select max(cid) + 1 into idx from t_course;insert into t_course(cid, cname, tid)values (idx, name, 1);
end$$
delimiter ;
​
call p6();
调用SET @avg_score = 0;
CALL a5(1001, @avg_score);
SELECT @avg_score AS '平均分';

相关文章:

  • 【Unity笔记】Unity开发笔记:ScriptableObject实现高效游戏配置管理(含源码解析)
  • 全国青少年信息素养大赛 C++算法创意实践挑战赛初赛 集训模拟试卷《二》及详细答案解析
  • ACI EP Learning Whitepaper 3. Disabling IP Data-plane Learning 功能
  • Vue3服务端渲染(SSR)深度调优:架构裂变与性能突围
  • bC一体化是传统批发企业 换道超车的唯一路径
  • Spring Cache(笔记)
  • 第二天 通过脚本控制物体移动和旋转
  • 03 UV
  • Flutter实战(1)-- 调试工具
  • 处理 Flutter 没有反应
  • 【C++算法】59.哈希表_存在重复元素 II
  • 排序算法复杂度及稳定性全解析(八种排序)
  • Spark-SQL核心编程(二)
  • HL7消息编辑器的使用手册
  • 案例 - 登录认证:保障系统安全访问的实现
  • 登录校验:保障系统安全访问的关键技术解析
  • 成员访问运算符重载(详解)
  • 【双指针】专题:LeetCode 202题解——快乐数
  • v3 自定义导航头部
  • OpenCV学习之获取图像所有点的坐标位置(二)
  • 敲定!今年将制定金融法、金融稳定法
  • 女儿被偷拍后,一个父亲的战斗
  • 美联储官员:货币政策不会立即改变,金融市场波动或致美国经济增长承压
  • 审议民营经济促进法草案等,十四届全国人大常委会第十五次会议将举行
  • 上海举行金融服务企业“走出去”推进大会
  • 漫游者秦龙,一生为经典画插图