SQL Server IF…ELSE 条件语句:T-SQL SELECT 查询示例

为什么需要条件语句?

SQL Server 中的条件语句可以帮助您为不同的条件定义不同的逻辑和操作。它允许您根据语句中定义的条件执行不同的操作。在现实生活中,您会执行许多依赖于其他活动或情况结果的操作。

SQL CASE 语句的一些实时示例是

  • 如果明天下雨,我将计划一次公路旅行。
  • 如果我所在城市的机票低于 400 美元,那么我将在欧洲度假,否则我将选择附近的旅游景点。

在这里,您可以看到一个操作,例如上面提到的公路旅行,是“取决于明天的天气是否会下雨!”的结果的条件依赖

类似地,MS SQL 也提供了有条件地执行 T-SQL 语句的功能。

SQL Server 中的 IF…Else 语句

MS SQL 中,IF…ELSE 是一种条件语句

任何 T-SQL 语句都可以使用 IF… ELSE 有条件地执行。

下图解释了 SQL Server 中的 IF ELSE

How If and Else Works
IF 和 ELSE 如何工作
  • 如果条件评估为True,则将执行 SQL Server 中 IF 条件后的 T-SQL 语句。
  • 如果条件评估为False,则将执行 ELSE 关键字后的 T-SQL 语句。
  • 一旦 IF T-SQL 语句或 ELSE T-SQL 语句被执行,其他无条件 T-SQL 语句将继续执行。

SQL 中的 IF…Else 语法和规则

语法

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

标尺

  • 条件应该是布尔表达式,即条件在评估时结果为布尔值。
  • SQL 中的 IF ELSE 语句可以有条件地处理单个 T-SQL 语句或 T-SQL 语句块。
  • 语句块应以关键字 BEGIN 开头,以关键字 END 结尾。
  • 使用 BEGIN 和 END 有助于 SQL Server 识别需要执行的语句块,并将其与不属于 IF…ELSE T-SQL 块的其他 T-SQL 语句分开。
  • ELSE 是可选的。

IF…ELSE 在布尔表达式中只有数值。

条件:True

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

IF…ELSE with the only numeric value in Boolean Expression

条件:False

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

IF…ELSE with the only numeric value in Boolean Expression

假设:假设您有一个名为‘Guru99’的表,其中包含两列和四行,如下所示

IF…ELSE with the only numeric value in Boolean Expression

我们将在后续示例中使用“Guru99”

IF…ELSE 在布尔表达式中使用变量。

条件:True

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

IF...ELSE with the variable in Boolean Expression

条件:False

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

IF...ELSE with the variable in Boolean Expression

IF…ELSE 使用 Begin End

条件:True

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

IF...ELSE with Begin End

条件:False

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

IF...ELSE with Begin End

带 No Else 的 IF 语句

您可以在 SQL 中使用 IF 语句而不使用 ELSE 部分。请记住,我们说过 ELSE 部分是可选的。例如

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

它将打印以下内容

IF statement with No Else

执行 False 条件将不会产生任何输出。考虑以下查询

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

结果是

IF statement with No Else

嵌套 IF…Else 语句

与许多其他编程语言不同,您不能在 SQL 中的 IF ELSE 条件内添加 ELSE IF 语句。这就是为什么您可以嵌套 IF ELSE 到 SQL 查询语句中。下面将对此进行演示

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;
  • 在此示例中,如果 @age 的值小于 18,代码将打印 underage。
  • 否则,将执行 ELSE 部分。ELSE 部分包含一个嵌套的 IF…ELSE。
  • 如果 @age 的值小于 50,它将打印 You are below 50。如果这些条件都不为真,代码将打印 Senior。

Nested IF…Else Statements

摘要

  • 变量是充当占位符的对象。
  • 语句块应以关键字 BEGIN 开头,以关键字 END 结尾。
  • 在 IF… ELSE 语句中使用 Else 是可选的
  • 将 SQL IF ELSE 条件嵌套在另一个 IF…ELSE 语句中也是可能的。