9.2.4 触发器

注:同级运算从左至右进行。

(7)SQL流程控制语句

流程控制语句用于使程序分支或构成循环以实现复杂的处理。

1)BEGIN爥END语句

BEGIN爥END语句用于将若干语句构成一个逻辑整体,称为语句块。其语法格式如下:

BEGIN

{sql语句或语句块}

END

2)IF爥ELSE语句

IF爥ELSE语句称为条件分支语句,用于构成按条件使程序执行产生分支的结构。其语法

格式如下:

IF<条件表达式>

{sql语句或语句块}

[ELSE

{sql语句或语句块}]

此结构执行过程是当条件表达式为TRUE时,执行IF后面的语句或语句块,否则执行ELSE后面的语句或语句块。

IF或ELSE后面要执行的语句不止一条时,必须将它们用BEGIN…END组织成语句块。

当IF或ELSE后面的语句块中包含另一个IF…ELES结构时,称为IF语句的嵌套。嵌套的层数没有限制。多层嵌套应用时要注意IF与ELSE的配对关系,避免逻辑错误。一般来说,ELSE总是与它前面最近的一个IF语句配对。

例9.1 查询C03课程平均成绩,若达到75分以上就显示“该课程成绩正常!”,否则统计出不及格人数后显示“该课程平均成绩较低!不及格人数为xx人。”

select@cj=avg(score)from sc where cno=′c03′

if@cj>=75

print′该课程平均成绩正常!′

else

begin

select@cj=count(score)from sc where cno=′c03′and score<60

print′该课程平均成绩较低!不及格人数为′+cast(@cj as varchar)+′人。′

end

说明:ELSE后要执行的语句有两条,因此用BEGIN爥END组成语句块。

3)CASE语句

如果分支数很多,可以使用IF爥ELSE的嵌套结构,但是往往很复杂,而CASE语句正是专门用于构成多路分支结构的语句。CASE语句有两种格式。

格式1(简单型CASE结构):

CASE <输入表达式>

WHEN<被比表达式i>THEN<结果表达式i>

[爥n]

[ELSE <结果表达式n+1>]

END

格式2(搜索型CASE结构):

CASE

WHEN<布尔表达式1> THEN<结果表达式1>

[爥n]

[ELSE <例外结果表达式>]

END

说明:

◆在简单CASE结构中首先计算<输入表达式>,将其结果按顺序逐一与<被比表达式i>进行相等比较,如是,则返回该行THEN后面<结果表达式i>的值,如果<输入表达式>与所有<被比表达式>都不匹配,则返回ELSE后面的<结果表达式n+1>。如果语句中不包含ELSE子句则返回NULL。

◆对于搜索型CASE结构,按顺序逐一判断每个WHEN子句中的布尔表达式,若为TRUE,则返回相应的<结果表达式>。否则返回<例外结果表达式>的值。若没有ELSE子句则返回NULL。

例9.2 应用CASE简单结构查询学生的专业属于文经类还是理工类。

查询语句及执行结果如图9.8所示。