SQL基础:SQL SERVER中的流程控制语句

一、IF语句

IF语句是SQL SERVER中最常用的流程控制语句之一,它根据指定的条件执行不同的代码块。IF语句的基本格式如下所示:

IF condition

BEGIN

statement1;

statement2;

...

END;

ELSE

BEGIN

statement3;

statement4;

...

END;

1.1 IF语句的条件

IF语句中的条件可以是任何返回TRUE或FALSE的表达式。例如,可以使用比较运算符(<、>、=、<>、<=、>=)、逻辑运算符(AND、OR、NOT)和函数(例如LEN、ISNULL)等构建复杂的条件表达式。

注意:在使用IF语句时,条件表达式必须要用圆括号括起来。

1.2 IF语句的执行

当IF语句的条件为TRUE时,IF语句会执行THEN子句中的所有代码块;当IF语句的条件为FALSE时,会执行ELSE子句中的所有代码块。

下面是一个使用IF语句的示例,其中根据salary的值来决定bonus的值:

DECLARE @salary DECIMAL(10,2) = 3000.00;

DECLARE @bonus DECIMAL(10,2);

IF @salary > 4000.00

SET @bonus = 500.00;

ELSE

SET @bonus = 200.00;

SELECT @bonus AS 'Bonus';

说明:在上面的示例中,salary的值为3000.00,所以会执行ELSE子句中的代码块,设置bonus的值为200.00。

二、CASE语句

CASE语句是一种类似于IF语句的流程控制语句。它可以根据指定的条件执行不同的代码块。与IF语句不同的是,CASE语句可以根据表达式的不同返回不同的值或执行不同的代码块。CASE语句的基本格式如下所示:

CASE expression

WHEN value1 THEN result1

WHEN value2 THEN result2

....

ELSE default_result

END

2.1 CASE语句的表达式

CASE语句的表达式可以是任何返回值的表达式,例如变量、列名和函数等。

2.2 CASE语句的值

CASE语句的值可以由一个或多个WHEN子句指定。每个WHEN子句包含一个值和一个结果。如果表达式的值与某个WHEN子句中的值相等,则返回该子句中指定的结果。

2.3 CASE语句的默认值

CASE语句的ELSE子句可以指定一个默认结果。如果表达式的值与WHEN子句中的任何值都不相等,则返回ELSE子句中指定的默认结果。

下面是一个使用CASE语句的示例,根据department_id的不同,返回不同的部门名称:

DECLARE @department_id INT = 4;

DECLARE @department_name VARCHAR(50);

SELECT @department_name =

CASE @department_id

WHEN 1 THEN '人力资源部'

WHEN 2 THEN '财务部'

WHEN 3 THEN '市场部'

ELSE '未知部门'

END;

SELECT @department_name AS 'DepartmentName';

说明:在上面的示例中,department_id的值为4,因此返回的是ELSE子句中指定的默认结果:未知部门。

三、WHILE语句

WHILE语句是一种循环语句,它可以反复执行一段代码块,直到指定的条件为FALSE为止。WHILE语句的基本格式如下所示:

WHILE condition

BEGIN

statement1;

statement2;

...

END;

3.1 WHILE语句的条件

WHILE语句中的条件是一个可执行表达式,通常这个表达式都会包含一个或多个变量或函数。如果条件为TRUE,则执行循环中的代码块;如果条件为FALSE,则终止循环。

3.2 WHILE语句的执行

WHILE语句的执行逻辑非常简单。首先,检查条件表达式的值。如果这个值为TRUE,则执行代码块中的所有语句;如果这个值为FALSE,则跳过代码块中的所有语句,继续执行后面的代码。

下面是一个使用WHILE语句的示例,打印出1~10之间的所有奇数:

DECLARE @counter INT = 1;

DECLARE @max_value INT = 10;

WHILE @counter <= @max_value

BEGIN

IF @counter % 2 = 1

PRINT @counter;

SET @counter = @counter + 1;

END;

说明:在上面的示例中,WHILE语句会在counter等于1时开始执行,根据IF语句的判断结果是否输出该值,然后继续执行下一次循环,直到counter等于10时退出循环。

四、BREAK和CONTINUE语句

BREAK语句和CONTINUE语句是在循环中常用的结束语句。它们使循环的执行更灵活。BREAK语句用于立即终止循环,而CONTINUE语句用于跳过当前的循环并继续执行下一次循环。下面是BREAK和CONTINUE语句的使用示例:

DECLARE @counter INT = 1;

DECLARE @max_value INT = 10;

WHILE @counter <= @max_value

BEGIN

IF @counter % 2 = 0

BEGIN

SET @counter = @counter + 1;

CONTINUE;

END;

IF @counter = 7

BREAK;

PRINT @counter;

SET @counter = @counter + 1;

END;

说明:在上面的示例中,WHILE语句会在counter等于1时开始执行,根据IF语句的判断结果是否输出该值,如果该值为偶数,则通过CONTINUE语句跳过当前循环,并执行下一次循环;如果该值为奇数但等于7,则通过BREAK语句立即终止循环;否则输出该值,并执行下一次循环,直到counter等于10时退出循环。

五、总结

本文介绍了SQL SERVER中的流程控制语句,包括IF语句、CASE语句、WHILE语句和BREAK/CONTINUE语句。这些流程控制语句使得在编写复杂的SQL语句时更加灵活和方便。在使用这些语句时,需要注意条件表达式的书写,以及控制语句的执行逻辑。

数据库标签