1
数据库技术及应用
1.9.2.1 6.2.1 条件语句
6.2.1 条件语句

在程序中如果要对给定的条件进行判定时,当条件为TRUE(真)或FALSE(假)时分别执行不同的T-SQL语句。

1.IF...ELSE语句

IF...ELSE语句为TransacT-SQL语句的执行强加条件。只有条件满足,才能执行条件之后的语句或语句块,否则执行ELSE关键字之后的语句或语句块。其中ELSE关键字与其后面的语句块是可选的。

语法格式:

参数说明如下:

●Boolean_expression:返回TRUE或FALSE的表达式。如果布尔表达式中含有SELECT语句,则必须用括号将SELECT语句括起来。

●sql_statement|statement_block:任何T-SQL语句或用语句块定义的语句分组。除非使用语句块,否则IF或ELSE条件只能执行一条T-SQL语句。若要定义语句块,请使用块定义关键字BEGIN和END。

从上述语法格式可看出IF语句分为带ELSE部分和不带ELSE部分两种形式。

(1)带ELSE部分的IF语句:

当条件表达式的值为真时执行A,然后执行IF语句的下一语句;当条件表达式的值为假时执行B,然后执行IF语句的下一语句。

(2)不带ELSE部分的IF语句:

当条件表达式的值为真时执行A,然后执行IF语句的下一语句;当条件表达式的值为假时,直接执行IF语句的下一语句。

IF语句的执行流程图如图6-6、图6-7所示。

图6-6 带犈犔犛犈部分的犐犉执行流程

图6-7 不带犈犔犛犈部分的犐犉执行流程

IF...ELSE语句可用于批处理、存储过程和即席查询。当用于存储过程时,通常用于测试某个参数是否存在。此外,还可以在其他IF语句之后或在ELSE语句下面,嵌套另一个IF语句。嵌套层数没有限制,取决于可用内存的大小。

【例6-9】如果“数据库原理与应用”的平均成绩高于80分,则显示“数据库原理与应用课程平均成绩高于80分”,否则显示“数据库原理与应用课程平均成绩低于80分”。代码如下:

【例6-10】 IF...ELSE语句的嵌套使用,实现对例69的改进。代码如下:

注意:若子查询跟随在=、!=、<、>、>=、<=等之后,或子查询用作表达式,子查询返回的值不允许多于一个。

2.多分支CASE表达式

CASE表达式用于多条件分支选择。

CASE具有两种格式:

●简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果。

●CASE搜索函数计算一组布尔表达式以确定结果。

两种格式都支持可选的ELSE参数。

简单CASE函数语法格式:

CASE搜索函数语法格式:

参数说明如下:

●input_expression:使用简单CASE格式时所计算的表达式,可以是任意有效的表达式。

●WHENBoolean_expression:使用CASE搜索格式时所计算的布尔表达式,可以是任意有效的布尔表达式。

【例6-11】使用简单CASE函数更改课程编号的显示。

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

图6-8 例6-11的执行结果

【例6-12】使用带有CASE搜索函数的查询语句,搜索函数允许根据比较值在结果集内对值进行替换。

执行结果如图6-9所示。

图6-9 例6-12的执行结果