博客
关于我
MySQL学习笔记(十八)—— MySQL的流程控制结构
阅读量:731 次
发布时间:2019-03-21

本文共 3770 字,大约阅读时间需要 12 分钟。

流程控制结构是编程中的核心内容之一,通过顺序、分支、循环等方式实现程序的逻辑步骤管理。对于SQL程序来说,流程控制结构尤为重要,可以有效地实现数据处理的复杂需求。本文将从分支结构和循环结构两个主要方面,详细讲解流程控制的实现方法。

一、分支结构

在SQL程序中,分支结构通过if、case等语法实现程序的多路径执行。常用的分支结构包括if函数和case结构。

1. if函数

if函数是一个基础的分支语法,具有两种使用方式:

方式一:简单分支

IF conditional_expression THEN    -- 执行此处的语句    statement;ELSE    -- 执行备用语句    other_statement;END IF;

方式二:多重分支

通过elseif实现多次条件判断:

IF condition1 THEN    statement1;ELSEIF condition2 THEN    statement2;...ELSE    statementN;END IF;

适用场景:if函数适用于在begin和end块内的多重分支操作。

2. case结构

case结构在某些数据库系统中类似于编程语言中的switch语法,支持根据变量或表达式的值实现分支执行。

使用方法:

方式一:基于常量的分支

CASE    WHEN value1 THEN        -- 执行对应语句        statement1;    WHEN value2 THEN        -- 执行另一个语句        statement2;    ...    ELSE        -- 处理未匹配的值        default_statement;END CASE;

方式二:基于条件表达式的分支

CASE    WHEN conditional_expression THEN        statement1;    WHEN another_condition THEN        statement2;    ELSE        default_statement;END CASE;

适用场景:适用于处理基于不同值的分支操作,通常用于简单的if-else逻辑。

案例演示:

案例1:创建函数,根据成绩返回相应的评级

CREATE FUNCTION test_if(score FLOAT) RETURNS CHARBEGIN    DECLARE ch CHAR DEFAULT 'F';    CASE        WHEN score > 90 THEN SET ch = 'A';        WHEN score > 80 THEN SET ch = 'B';        WHEN score > 60 THEN SET ch = 'C';        ELSE SET ch = 'D';    END CASE;    RETURN ch;END $SELECT test_if(87);

案例2:创建存储过程,根据工资调整

CREATE PROCEDURE test_if_pro(IN sal DOUBLE)BEGIN    IF sal < 2000 THEN        DELETE FROM employees WHERE employees.salary = sal;    ELSEIF sal > 2000 AND sal < 5000 THEN        UPDATE employees SET salary = salary + 1000;    ELSE        UPDATE employees SET salary = salary + 500;    END IF;END $CALL test_if_pro(2100);

二、循环结构

循环结构是实现重复操作的核心工具,在SQL中主要包括while、loop和repeat三种循环控制语法。

1. while循环

while循环基于条件进行控制,适用于需要特定次数执行操作的场景。

语法示例:

【标签:】while condition DO    -- 执行循环体    loop_body;END WHILE 【标签】;

案例:批量插入记录

DELIMITER $ CREATE PROCEDURE pro_while1(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_while1(100);

案例扩展:带有leave语句的循环

DELIMITER $ CREATE PROCEDURE test_while1(IN insertCount INT)BEGIN    DECLARE i INT DEFAULT 1;    a: WHILE i <= insertCount DO        INSERT INTO admin(username, password) VALUES(CONCAT('xiaohua', i), '0000');        IF i >= 20 THEN LEAVE a;        END IF;        SET i = i + 1;    END WHILE a;END $CALL test_while1(100);

2. loop循环

loop循环类似于一个无限循环,可以用来实现简单的死循环。

语法示例:

【标签:】loop    -- 定义循环体    loop_body;END LOOP 【标签】;

案例:模拟简单死循环

DELIMITER $ CREATE PROCEDURE test_loop(IN isOk BOOLEAN)BEGIN    WHILE 1 DO        IF isOk THEN            -- 执行成功逻辑            SELECT '成功';        ELSE SELECT '失败';        END IF;    END WHILE;END $CALL test_loop(1);

3. repeat循环

repeat循环基于条件继续执行,更适合根据某个条件重复操作。

语法示例:

【标签:】repeat    -- 循环体    repeat_body;UNTIL condition END repeat 【标签】;

案例:批量插入偶数次

DELIMITER $ CREATE PROCEDURE test_while1(IN insertCount INT)BEGIN    DECLARE i INT DEFAULT 0;    a: WHILE i <= insertCount DO        SET i = i + 1;        IF MOD(i, 2) != 0 THEN            INSERT INTO admin(username, password) VALUES(CONCAT('xiaohua', i), '0000');        END IF;    END WHILE a;END $CALL test_while1(100);

流程控制结构经典案例讲解

案例:随机插入字符串

DELIMITER $ CREATE PROCEDURE test_randstr_insert(IN insertCount INT)BEGIN    DECLARE i INT DEFAULT 1;    DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';    DECLARE startIndex INT;    DECLARE len INT;    WHILE i <= insertCount DO        SET startIndex = FLOOR(RAND() * 26 + 1);        SET len = FLOOR(RAND() * (20 - startIndex + 1) + 1);        INSERT INTO stringcontent(content) VALUES(SUBSTR(str, startIndex, len));        SET i = i + 1;    END WHILE;END $CALL test_randstr_insert(10);

这些案例展示了流程控制在实际开发中的多种应用场景,通过合理搭配分支和循环结构,可以有效地实现复杂的数据处理任务。

转载地址:http://xhtgz.baihongyu.com/

你可能感兴趣的文章
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
Python 内置 sum 函数 vs. for 循环性能
查看>>
Python 内置时间模块
查看>>
python 内部如何实现命名元组?
查看>>
python 写入json数据到数据库
查看>>
Python 列表删除相同的元素
查看>>
Python 初学者需要知道的四条建议
查看>>
Python 判断字符串是否包含子字符串
查看>>
python 判断当前时间是否为零点
查看>>
python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
查看>>
python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
查看>>
python 利用pyttsx3文字转语音
查看>>
python 利用已有Ner模型进行数据清洗合并
查看>>
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
python 图片转ico
查看>>
python 图片转文字、语音转文字、文字转语音保存音频并朗读
查看>>
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
查看>>