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

MySQL流程控制

一:介绍

在 MySQL 中,流程控制语句用于控制存储过程和自定义函数中的程序流程。主要的流程控制语句包括:IF 语句CASE 语句LOOP 语句LEAVE 语句ITERATE 语句REPEAT 语句和 WHILE 语句

(1):if条件语句

IF 语句用于条件判断,根据条件的真假执行不同的语句。其基本语法如下:

IF 条件 THEN
    //执行的语句
ELSEIF 条件THEN
    //执行的语句
ELSE
    //执行的语句
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,myCname
         from v4 where sid=stuId
    order by score desc
    limit 1;
    -- 根据局部变量做判断
    if myScore>80 then
        select concat(myCname,'A') 课程情况;
    elseif myScore<80 and myScore>60 then
        select concat(myCname,'B') 课程情况;
    else
        select 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 '成绩等级';

(2):CASE条件语句

CASE 语句提供了多条件选择,可以实现更复杂的条件判断。其基本语法如下:

CASE X
    WHEN condition1 THEN statements1
    WHEN condition2 THEN statements2
    ...
    ELSE statements
END CASE;

 

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,gender
    from t_student where sid=stuId;
    -- 使用判断
    case gender
        when '男' then
            set gender = '小伙子';
        when '女' then
            set gender = '小姑娘';
        else
            set 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 '称呼';

(3):LOOP循环语句

LOOP 语句用于重复执行某些语句,直到使用 LEAVE 语句跳出循环。其基本语法如下:

[loop_label:] LOOP
    statements;
    IF condition THEN
        LEAVE [loop_label];
    END IF;
END LOOP [loop_label];

计算阶乘

DELIMITER //
CREATE PROCEDURE a3(IN p_num INT, OUT p_result INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    SET p_result = 1;
    
    my_loop: LOOP
        SET p_result = p_result * i;
        SET i = i + 1;
        
        IF i > p_num THEN
            LEAVE 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的阶乘';

(4):WHILE循环语句

WHILE 语句用于在满足条件时执行循环。其基本语法如下:

[while_label:] WHILE condition DO
    statements;
END WHILE [while_label];

打印数字

DELIMITER //
CREATE PROCEDURE a4(IN p_max INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    
    WHILE i <= p_max DO
        SELECT i AS '当前数字';
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

调用

CALL a4(3);

计算平均分

drop procedure if exists p6;
delimiter $$
create procedure p6()
begin
    declare 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_length
        do
            set 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 '平均分';

相关文章:

  • 如何管理“灰色时间”导致的成本漏洞
  • SOLID原则详解:提升软件设计质量的关键
  • 【DDR 内存学习专栏 1.3.1 -- DDR 的 Bank 及 burst 访问】
  • 空间信息可视化——WebGIS前端实例(一)
  • 基于Nacos+动态线程池的分布式系统弹性设计:投行交易与风控场景实战
  • 安当TDE透明加密技术:企业机密文件和数据库加密解决方案
  • 大数据学习栈记——Redis安装及其使用
  • MVCC是什么?MVCC的作用是什么?MVCC实现方式有哪些?
  • 批量将多个文件转成压缩包,支持批量设置压缩密码
  • CSI-external-provisioner
  • 从零开始学A2A一:A2A 协议概述与核心概念
  • 人工智能驱动的科研新范式及学科应用研究
  • 【Java学习笔记】Java初级阶段代码规范
  • 基于项目管理的轻量级目标检测自动标注系统【基于 YOLOV8】
  • 打造可控可测的星座网络:IPLOOK低轨通信仿真平台搭建实践
  • 小葱桌面电视版下载_小葱桌面app免费下载最新版
  • 关于 软件开发模型 的分类、核心特点及详细对比分析,涵盖传统模型、迭代模型、敏捷模型等主流类型
  • 2025年常见渗透测试面试题-红队面试宝典下(题目+回答)
  • 谷歌浏览器的开发者模式如何开启及安装教程
  • 关于 驱动开发方法 的详细分类、核心特点及对比分析,涵盖 TDD、MDD、BDD、DDD、ATDD、FDD、PDD 等主流方法
  • 特朗普将举行集会庆祝重返白宫执政百日,被指时机不当
  • 快捷公寓单间不足5平方米?公寓方:预订平台图片只是参考,已退房款
  • 美联合健康集团高管枪杀案嫌疑人对谋杀指控不认罪
  • 邮轮、无人机、水上运动……上海多区推动文旅商体展融合发展
  • 商务部:已有超1.2亿人次享受到以旧换新补贴优惠
  • 加拿大财长:加拿大需要抗击美国关税