数据库原理与应用 第 15 章 · 第五节
课程第 15 章第五节 六种语句IF例15-1按值配按条件配WHILEREPEATLOOP跳出与跳过 版式
第 15 章 存储过程与函数 · 第五节

流程控制语句

本 节 知 识 点
  1. 32有了它们,SQL 才算能编程
  2. 33条件成立走这边,不成立走那边
  3. 34求 s1 的平均分,判它及不及格
  4. 35拿一个值去逐个配
  5. 36每一支写一个条件
  6. 37先判断,再决定转不转
  7. 38先转一圈,再判断要不要停
  8. 39自己不带条件,转个不停
  9. 40LEAVE 和 ITERATE
32
第 15 章 · 第五节

有了它们,SQL 才算能编程

两种分支、三种循环,外加两个跳转。

第 32 页课件

试一试六种语句点一行看一个

点一行,看它长什么样、什么时候用
语句什么形状

重 点

这一节是全章的骨头。没有分支和循环,存储过程只是几句 SQL 排排坐。

想一想

为什么普通的 SELECT 里用不上这些语句?

33
第 15 章 · 第五节

条件成立走这边,不成立走那边

ELSEIF 可以接很多条,ELSE 兜底。

第 33 页课件

重 点

从上往下逐条判断,中了第一个成立的就跳出去,后面的不再看。

记牢它四个词

  1. IF … THEN
  2. ELSEIF … THEN
  3. ELSE
  4. END IF;

上机做

上机二第 1 题 四个分支跑一遍

想一想

把判断条件的顺序倒过来写,结果会变吗?

34
第 15 章 · 第五节

求 s1 的平均分,判它及不及格

课件这一段直接敲跑不了,得先包起来。

第 34 页课件

重 点

课件印的是一段裸的 BEGIN…END。在 mysql> 里 BEGIN 是开事务,后面就报 1064。

知道更多

把它装进 CREATE PROCEDURE 里就好了。语句块只活在过程和函数里。

上机做

上机一第 6 题 包成过程再跑一遍

想一想

s1 的两门课平均多少分?

35
第 15 章 · 第五节

拿一个值去逐个配

CASE 字段 WHEN 值 THEN … END。

第 35 页课件

重 点

适合同一个字段有几种固定取值的情况,比一串 ELSEIF 清楚得多。

知道更多

例 15-2 把 sex 字段的男女换成 M 和 F,一句 SELECT 就做完了。

上机做

上机二第 2 题 课件那两个例子

36
第 15 章 · 第五节

每一支写一个条件

CASE WHEN 条件 THEN … END,前面不跟字段。

第 36 页课件

分清楚两种格式

格式拿什么配
CASE 字段值相等
CASE 空着条件成立

重 点

条件里要用到范围、比较、IS NULL 的时候,只能用格式二。

想一想

例 15-3 里成绩为空那一支,为什么必须放在最前面?

37
第 15 章 · 第五节

先判断,再决定转不转

条件一开始就不成立,一圈都不转。

第 37 页课件

试一试三种循环跑同一件事

用哪种循环 起点
转了几圈total

重 点

循环变量一定要在循环体里自己加,忘了这一句就是死循环。

上机做

上机二第 3 题 求 1 加到 100

38
第 15 章 · 第五节

先转一圈,再判断要不要停

UNTIL 后面写的是「什么时候停」,不是「什么时候继续」。

第 38 页课件

重 点

不管条件成不成立,REPEAT 至少转一圈,这是它跟 WHILE 唯一的差别。

打个比方

先敲一下门再看有没有人,和先看有没有人再敲门。

上机做

上机二第 5 题 起点挪到范围外面

想一想

循环体里有 INSERT 的时候,这个差别有多要命?

39
第 15 章 · 第五节

自己不带条件,转个不停

全靠 LEAVE 跳出来,忘了写就停不下来。

第 39 页课件

重 点

LOOP 前面要给它起个标签,LEAVE 才有地方可跳。

知道更多

三种循环能做的事情完全一样,会用一种就够,读得懂另外两种即可。

40
第 15 章 · 第五节

LEAVE 和 ITERATE

一个是别的语言里的 break,一个是 continue。

第 40 页课件

分清楚两个跳转

写法跳到哪
LEAVE 标签整个循环外
ITERATE 标签下一圈开头

重 点

标签写错在建的时候就报 1308,不用等到调用才发现。

上机做

上机二第 6 题 两个跳转各用一次

练一练

REPEAT 与 WHILE 最主要的区别是?
  1. AREPEAT 更快
  2. BREPEAT 至少执行一次循环体
  3. CWHILE 不能嵌套
  4. DREPEAT 不需要循环变量
答案 B

WHILE 先判断后执行,条件一开始不成立就一次都不跑。REPEAT 是先跑后判断。

保山学院·人工智能教研室·曹鼎鼎