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所示。