数据库原理及MySQL应用 | 程序流程控制

news2024/12/23 6:00:18

解决复杂问题不可能通过一个SQL语句完成,我们需要执行多个SQL操作。流程控制语句的作用就是控制存储过程或存储函数中SQL语句的执行顺序,是我们完成复杂操作必不可少的一部分。 

流程控制语句是指可以控制程序运行顺序的语句,程序运行顺序主要包括顺序结构、分支结构和循环结构。MySQL中流程控制语句有IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句等。

01、判断语句

判断语句用来进行条件判断,根据是否满足条件(可包含多个条件),来执行不同的语句。判断语句构成分支结构。MySQL中常用的判断语句有IF和CASE两种。

1. IF语句

IF语句用来进行条件判断,可根据不同条件执行不同的操作。该语句在执行时首先判断IF语句后的条件是否为真,为真则执行THEN后的内容,如果为假则继续判断下一个IF语句直到条件为真为止,当以上条件都不满足时则执行ELSE子句后的内容。IF语句的基本语法格式如下所示。

语法说明如下。

  • search_condition是条件表达式。

  • statement_list是当前面的条件表达式为真时执行的SQL语句列表。

  • ELSEIF子句是可选选项,当前面的条件表达式为假时,用于设定继续判断的下一个IF语句。

  • ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。

【例8-30】在图书销售数据库booksale中建立存储过程getpricelevel1,该存储过程可通过图书编号bookid查看图书价格,返回价格和等级,其中价格高于或等于100元为A级,低于100元且高于或等于70元为B级,低于70元且高于或等于50元为C级,低于50元且高于或等于30元为D级,其余为E级,然后调用存储过程查看结果。

执行结果如图8-13所示。

■ 图8-13IF语句

2. CASE语句

CASE语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比IF语句更复杂的条件判断。CASE语句的基本语法格式如下所示。

语法说明如下。

  • case_value是表示条件判断的变量,决定了哪一个WHEN子句会被执行。

  • when_value是表示变量的取值,如果某个when_value的值与case_value变量的值相同,则执行对应的THEN关键字后的statement_list中的语句。

  • ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。其后的statement_list表示当when_value的值都不与case_value的值相同时的执行语句。

语法说明如下。 

  • search_condition参数表示条件判断语句。

  • statement_list参数表示不同条件的执行语句。

  • ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。

提示

语法2与语法1不同的是,语法2语句中的WHEN语句将被逐个执行,直到某个search_condition表达式为真,则执行对应THEN关键字后面的statement_list语句。如果没有条件匹配,ELSE子句里的语句被执行。CASE不能用于判断NULL。

【例8-31】用CASE语句改写例8-30,建立存储过程getpricelevel2,然后调用存储过程查看结果。

02、循环语句

循环语句是在符合指定条件的情况下,重复执行某一段代码。循环语句是构成循环结构的一部分。MySQL中常用的循环语句有LOOP、REPEAT和WHILE三种。

1. LOOP语句

LOOP语句用来实现简单的循环,使系统能够重复执行循环体内的语句列表。与IF和CASE语句相比,LOOP只是实现了一个简单的循环,并不进行条件判断。LOOP语句的基本语法格式如下所示。

语法说明如下。

  • begin_label和end_label是可选选项,分别是循环开始和结束的标志,该标志必须符合标识符命名规则,且最长为16个字符。如果设置了begin_label,则后面必须带着冒号(:),end_label可以省略。但如果设置了end_label,那必须设置begin_label,且标志名必须相同。

  • statement_list表示循环执行的语句。

提示

LOOP语句本身没有停止循环的语句,必须使用跳转语句LEAVE才能停止循环,跳出循环过程,否则会出现死循环。

【例8-32】在图书销售数据库booksale中建立存储过程sumnumber1,该存储过程可实现1到任意数的累加,然后调用存储过程查看结果。

执行结果如图8-14所示。

■ 图8-141到任意数的累加

声明局部变量i并赋初始值为1,声明局部变量sum并赋初始值为0,然后在LOOP语句中判断i的值是否大于输入的数值,如果是则输出num的值和sum的值,然后退出循环;如果不是则将i的值累加到sum变量中,并对i进行加1,再次执行LOOP中的语句。

2. REPEAT语句

REPEAT语句可以实现有条件控制的循环,每次语句执行完毕,会对条件表达式进行判断,如果表达式返回值为真,则循环结束,否则重复执行循环中的语句。REPEAT语句的基本语法格式如下所示。

语法说明如下。

  • begin_label、end_label和statement_list同LOOP语句的同名参数保持一致。

  • search_condition是结束循环的条件,满足该条件即条件的返回值为TRUE时循环结束。

【例8-33】用REPEAT改写例8-32,建立存储过程sumnumber2,然后调用存储过程查看结果。

3. WHILE语句

WHILE语句同样可以实现有条件控制的循环。WHILE语句和REPEAT语句不同的是,WHILE语句是当满足条件时,才执行循环内的语句,否则退出循环。WHILE语句的基本语法格式如下所示。

语法说明:所有参数同REPEAT语句的同名参数保持一致。

【例8-34】用WHILE改写例8-32,建立存储过程sumnumber3,然后调用存储过程查看结果。

03、跳转语句

跳转语句用于实现程序执行过程中的流程跳转。MySQL中常用的跳转语句有LEAVE和ITERATE两种。跳转语句也是构成循环结构的一部分。

跳转语句的基本语法格式如下所示。

语法说明:label表示循环的标志。

提示

LEAVE语句和ITERATE语句都用来跳出循环语句,但两者的功能是不一样的。TERATE语句用于结束本次循环的执行,开始下一轮循环的执行操作,重新开始循环;而LEAVE语句用于跳出整个循环,然后执行循环后面的程序。使用这两个语句时一定要区分清楚。

ITERATE语句只能应用在循环结构LOOP、REPEAT和WHILE语句中,LEAVE除可以在循环结构中应用外,还可在BEGIN…END中使用。

【例8-35】对比LEAVE和ITERATE的使用,然后调用存储过程查看结果。

执行结果如图8-15所示。

■ 图8-15LOOP语句

声明局部变量num并赋初始值为0,在LOOP循环中,当num小于5时,利用ITERATE不执行以下操作,重新开始LOOP循环,直到num大于5时,查看num的具体值,并利用LEAVE跳出LOOP循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各种数据类型的SPI, UART, I2C等方式的通信传输以及存储到EEPROM、Flash等设备的简易实现方法

各种类型的数据传输和存储就涉及到大小端的问题,首先要简单说下芯片的大小端问题,我们这里主要讨论Cortex-M内核。 M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之…

Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置

源码地址(重点开源码中的 nacos8030 模块):https://download.csdn.net/download/weixin_42950079/87264006 多配置文件 / 共享配置 在一个微服务架构应用系统中可能包含成百上千个微服务。而很多微服务可能都引入相同的中间件,当环境中引入的中间件较多时…

【eth uniswap】uniswap 自动路径(Auto Router)错误导致的swap超大损耗

____tz_zs 2022-06-09 稿 对于同时有v2池子和v3池子的Token,感觉最近uniswap的app的自动路由寻址(Auto Router)有点问题,找的永远是v3的(如示例caw/weth)池子。此时的情况是v3池子很小,只有几十…

用 HarmonyOS ArkUI 来开发一个健康饮食应用

本文演示如果在DevEco Studio 3里面,用HarmonyOS的ArkUI来开发一个健康饮食应用。体验HarmonyOS 3最新API 9! 获取HarmonyOS应用 HarmonyOS的ArkUI来开发一个健康饮食的ArkUI程序“ArkUIHealthyDiet”,基础代码已经有了[1],个人…

【数据结构初阶】八大排序算法+时空复杂度

学会控制自己是人生的必修课 文章目录一、插入排序1.直接插入排序2.希尔排序二、选择排序1.直接选择排序2.堆排序(已经建好堆的基础之上)三、交换排序(Swap)1.冒泡排序(大学牲最熟悉的排序)2.快速排序&…

Python 数据库开发实战-Mac系统下通过homebrew安装Redis数据库

此文章的前置条件是 “Mac系统已安装过Homebrew”,如果未安装,可访问 “Mac 安装 homebrew 详细教程” 一文,详细介绍Homebrew的用法。利用 “Homebrew” 对 “Redis” 进行安装管理,那是一个方便啊。 利用 homebrew 安装 Redis …

【Windows逆向】【Qt】日志信息打印

▒ 目录 ▒🛫 导读需求开发环境1️⃣ 示例程序Demo2️⃣ 编写功能(QtCreator版本)3️⃣ 编写功能(VS版本)🛬 文章小结📖 参考资料🛫 导读 需求 调试是编程中常见的定位手段&#xf…

字节一面,操作系统这题没答好,可惜了

问题引入: 在曾经我们学习Linux的经历中,我们也是多次使用信号的。比如:当我们在使用xshell时,在命令行中按Ctrlc,这个键盘输入产生了一个硬件中断,被操作系统获取,解释成信号,发送…

两百行C++代码实现yolov5车辆计数部署(通俗易懂版)

这周用opencv简单实现了一下基于yolov5检测器的车辆计数功能,方法是撞线计数,代码很简单一共就两百多行,测试视频是在b站随便下载的。注:该代码只能演示视频demo效果,一些功能未完善,离实际工程应用还有距离…

JMeter整体综述

JMeter整体综述1. JMeter体系结构及运行原理1.1 主要的组件1.2 运行原理2. 元件执行顺序和作用域2.1 元件执行顺序2.2 元件执行作用域3. 参考1. JMeter体系结构及运行原理 负载模拟:负责模拟用户请求。如取样器有参数化的需求,可通过配置元件或前置处理器…

15.JavaScript 01

文章目录一、概念二、功能三、 JavaScript发展史四、 ECMAScript:客户端脚本语言的标准1、基本语法1. 与html结合方式2. 注释3. 数据类型4. 变量5. 运算符6. 流程控制语句7. JS特殊语法8. 练习:99乘法表2、基本对象1. Function:函数(方法)对象…

上线3天,下载4万,ChatGPT 中文版VSCode插件来了

ChatGPT 的 Debug 功能,有人应用化了。 ChatGPT 这几天可谓是风头无两。作为一个问答语言模型,它最大的优点就是可以回答与编程相关的问题,甚至回复一段代码。 尽管有人指出 ChatGPT 生成的代码有错误,但程序员们还是对它写代码、…

图像配准开源数据集资源汇总

Brown 数据集 数据集下载链接:http://suo.nz/3042bh 数据集由 1024 x 1024 位图 (.bmp) 图像组成,每个图像包含一个 16 x 16 图像块阵列。每个补丁都被采样为 64 x 64 灰度,具有规范的比例和方向。 ETHZ Toys 数据集下载链接&#xff1a…

Java中的语法糖(真甜)

什么是语法糖(Syntactic sugar) 语法糖是一个计算机数据,特指在编程语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。 糖嘛&#xff0c…

08.DashBoard流监控配置

08.DashBoard流监控配置 每个服务提供者都需要实现actuator&#xff0c;才可以实现流量监控。 导入Maven依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><…

【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 完整代码已上传我的资源&#xff1a;【图像去噪】基于matlab GUI空域频域滤波图像去噪【含Matlab源码 914期】 获取代码方式2&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0…

移动端防抓包实践

目录介绍 01.整体概述介绍 1.1 项目背景1.2 思考问题1.3 设计目标1.4 收益分析 02.市面抓包的分析 2.1 Https三要素2.2 抓包核心原理2.3 搞定CA证书2.4 突破CA证书校验2.5 如何搞定加解密2.6 Charles原理2.7 抓包原理图2.8 抓包核心流程 03.防止抓包思路 3.1 先看如何抓包3.2 …

C++计算机视觉库OpenCV在Visual Studio 2022的配置方法

本文介绍在Visual Studio 2022中配置、编译C 计算机视觉库OpenCV的方法。 1 OpenCV库配置 首先&#xff0c;我们进行OpenCV库的下载与安装。作为一个开源的库&#xff0c;我们直接在其官方下载网站&#xff08;https://opencv.org/releases/&#xff09;中进行下载即可&#x…

实现无入侵式C++代码mock工具

为了实现真正无侵入式的mock&#xff0c;我们基于开源Hook框架Frida-gum提供的API&#xff0c;利用C模板进行封装&#xff0c;作者编写了一个简单实用的mock工具&#xff0c;在此开源分享&#xff08;代码详见附录&#xff09;。背景在单元测试中&#xff0c;往往需要减少被测函…

如何实现高性能网络编程-ChatGPT怎么看

hi ,大家好&#xff0c;我是大师兄。听说最近chatgpt特别火&#xff0c;那我们邀请一下chatgpt如何实现&#xff1a;我们先来小试牛刀&#xff1a;刚开始用先用英文交流一下&#xff0c;然后试一下中文&#xff1a;元芳你怎么看&#xff1f;下期直播主题--网络编程 (如何实现高…