数据库多条件查询 CASE... WHEN

本文详细介绍了SQL中CASE WHEN语句的两种形式及其使用方法。CASE WHEN语句广泛应用于多种数据库系统,如DB2、Oracle、SQL Server等,是进行条件判断的重要手段。

CASE... WHEN... THEN ...ELSE ...END

CASE WHEN语句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型数据库都受到支持,是标准的SQL语句.
CASE WHEN 语法有两种情况:
第一种是CASE 后面不带表达式的:
CASE WHEN expression THEN 操作1
          WHEN expression THEN 操作2
           .......
          ELSE 操作n
END

第二种是CASE 后带表达式的(此时WHEN 后面是该表达式可能的值):

CASE expression
	WHEN  expression值1 THEN  操作1
	WHEN  expression值2 THEN 操作2
                .......
                ELSE 操作n
END 


在 SQL Server 中,`CASE WHEN` 和 `IIF()` 都可以用来实现条件判断,但它们的语法结构、灵活性和使用场景有所不同。下面详细说明它们的区别,并给出示例代码。 --- ### 1. `CASE WHEN` 用法 `CASE WHEN` 是 SQL 标准中的条件表达式,支持多个条件判断,语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END ``` **示例:根据成绩返回等级** ```sql SELECT Score, CASE WHEN Score >= 90 THEN 'A' WHEN Score >= 80 THEN 'B' WHEN Score >= 70 THEN 'C' ELSE 'D' END AS Grade FROM Students; ``` **特点:** - 支持多个 `WHEN` 分支 - 支持复杂条件表达式(如范围判断) - 适用于所有 SQL 实现(可移植性强) --- ### 2. `IIF()` 用法 `IIF()` 是 SQL Server 2012 引入的一个函数,用于简化简单的三元条件表达式,语法如下: ```sql IIF(boolean_expression, true_value, false_value) ``` **示例:判断成绩是否及格** ```sql SELECT Score, IIF(Score >= 60, 'Pass', 'Fail') AS Result FROM Students; ``` **特点:** - 只支持两个分支(true/false) - 语法简洁,适合简单判断 - 不是 SQL 标准函数,仅适用于 SQL Server 2012 及以上版本 --- ### 3. `CASE WHEN` 与 `IIF()` 的区别总结 | 特性 | `CASE WHEN` | `IIF()` | |------|-------------|---------| | 支持多条件判断 | ✅ | ❌(仅支持 true/false) | | 语法复杂度 | 稍复杂 | 简洁 | | 可读性 | 更适合复杂逻辑 | 更适合简单逻辑 | | 兼容性 | SQL 标准,兼容性强 | SQL Server 专属,版本要求较高 | | 性能差异 | 无明显差异 | 无明显差异 | --- ### 4. 实际对比示例 **需求:根据成绩判断等级(A/B/C/D)** - 使用 `CASE WHEN`: ```sql SELECT Score, CASE WHEN Score >= 90 THEN 'A' WHEN Score >= 80 THEN 'B' WHEN Score >= 70 THEN 'C' ELSE 'D' END AS Grade FROM Students; ``` - 使用 `IIF()`(不推荐,嵌套复杂): ```sql SELECT Score, IIF(Score >= 90, 'A', IIF(Score >= 80, 'B', IIF(Score >= 70, 'C', 'D'))) AS Grade FROM Students; ``` 可以看到,`IIF()` 在嵌套使用时可读性差,而 `CASE WHEN` 更加清晰。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值