SQL中的条件语句WHEN-THEN-ELSE

SQL CASE与DECODE函数详解
本文详细介绍了SQL中的CASE表达式和DECODE函数的应用场景和语法,通过具体实例展示了如何使用CASE进行范围条件查询以及如何利用DECODE进行多值等值查询。

本篇文章讲述SQL条件语句WHEN-THEN-ELSE语句,以供参考,如有错误或不当之处还望大神们告知。
注意:在mysql中对应判断表达式的语句是WHEN-THEN-ELSE语句,本篇文章将介绍的是范围条件查询(WHEN-THEN-ELSE语句)和多值等值查询(DECODE语句)。

数据说明

####用户表T_USER结构如下:
字段 | 类型 | 长度 | 主键 | 为空
-|
id | number | 6 | 是 | 否
姓名 | char | 20 | 否 | 是
年龄 | number | 2 | 否 | 是
性别 | char | 2 | 否 | 是
日期 | date | - | 否 | 是
分数 | float | - | 否 | 是

####初始数据
这里写图片描述

CASE表达方式

CASE表达式适合范围查找

  • 计算T_USER中的成绩 t_score 如果 >= 85 显示‘优秀’ ; score>=60 且 score<85 显示‘及格’;score<60 则显示‘不及格’ 。
select u_id , u_name , u_score ,case when u_score >= 65.45 then '优秀'
                                     when u_score >=60 and u_score<85 then '及格'
                                     when u_score <60 then '不及格'
                                     else '数据错误'
end 
from T_USER ;

计算结果:
这里写图片描述

#DECODE函数

DECODE函数适合多值等值查询。

  • 查询T_USER中的成绩 t_score 中成绩为65.45,95.24,73.24的记录显示为‘查’否则显示不查。
select u_id , u_name , u_score , decode(u_score,
       65.45, '查',
       95.24, '查',
       73.24, '查',
  '不查'
) 
from T_USER ;

运行结果:
这里写图片描述

SQL 中的 `CASE WHEN THEN ELSE END` 是一种条件表达式,允许在查询中实现复杂的逻辑判断和结果返回。这种结构类似于编程语言中的 `if-else` 语句,适用于对数据进行分类、转换或计算。 ### 基本语法 ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 其中: - `WHEN condition`:定义一个条件判断。 - `THEN result`:当条件为真时返回的结果。 - `ELSE default_result`:可选部分,当所有条件都不满足时返回的默认值。 - `END`:结束整个 `CASE` 表达式。 --- ### 使用方式详解 #### 1. 简单 `CASE` 表达式(基于值匹配) 简单 `CASE` 表达式用于将某一列的值与多个固定值进行比较,并返回对应的结果。例如,在引用[1]中展示了一个简单的评分系统: ```sql SELECT CASE SCORE WHEN 'A' THEN '优' WHEN 'B' THEN '良' WHEN 'C' THEN '中' ELSE '不及格' END AS grade FROM scores; ``` 此查询将字母等级映射为中文描述。如果 `SCORE` 列的值是 `'A'`,则返回 `'优'`;如果是 `'B'`,则返回 `'良'`,依此类推[^1]。 #### 2. 搜索型 `CASE` 表达式(基于条件判断) 搜索型 `CASE` 表达式允许使用更灵活的布尔表达式来定义条件。例如: ```sql SELECT CASE WHEN salary > 10000 THEN '高薪' WHEN salary BETWEEN 5000 AND 10000 THEN '中等薪资' ELSE '低薪' END AS salary_level FROM employees; ``` 该查询根据员工薪资水平将其分为三类:高薪、中等薪资和低薪。这种方式比简单 `CASE` 更加灵活,适用于范围判断或多条件组合场景[^4]。 #### 3. 在 `CHECK` 约束中使用 `CASE` `CASE` 表达式也可用于表约束中,以实现复杂的数据完整性控制。例如,在引用[3]中提到的例子中,公司规定女性员工的工资必须高于 1000 元: ```sql ALTER TABLE employees ADD CONSTRAINT check_salary CHECK ( CASE WHEN sex = '2' THEN CASE WHEN salary > 1000 THEN 1 ELSE 0 END ELSE 1 END = 1 ); ``` 这个约束确保只有当性别为女性(假设 `'2'` 表示女性)时,工资必须大于 1000 元;对于其他性别,则不做限制[^3]。 #### 4. `CASE` 与聚合函数结合使用 在数据分析中,`CASE` 经常与聚合函数一起使用,以实现分组统计。例如: ```sql SELECT department, COUNT(*) AS total_employees, SUM(CASE WHEN salary > 8000 THEN 1 ELSE 0 END) AS high_salary_count FROM employees GROUP BY department; ``` 该查询统计每个部门的总人数以及薪资高于 8000 的员工数量。通过 `CASE` 表达式,可以动态生成新的逻辑列并参与聚合运算[^4]。 --- ### 注意事项 - **优先级问题**:`CASE` 表达式一旦找到第一个满足条件的分支,就会立即返回结果,后续的条件将被忽略。因此,条件顺序非常重要。 - **性能影响**:虽然 `CASE` 提供了灵活性,但在大数据集上频繁使用可能会影响查询性能,尤其是在嵌套多层 `CASE` 时。 - **别名命名**:使用 `AS` 关键字为 `CASE` 表达式的结果命名,有助于提升查询的可读性。 --- ### 示例代码总结 以下是一个综合示例,展示如何在实际查询中使用 `CASE` 表达式: ```sql SELECT employee_id, name, salary, CASE WHEN salary > 10000 THEN 'High' WHEN salary BETWEEN 6000 AND 10000 THEN 'Medium' ELSE 'Low' END AS salary_category, CASE gender WHEN 'M' THEN 'Male' WHEN 'F' THEN 'Female' ELSE 'Other' END AS gender_full FROM employees; ``` 此查询将薪资划分为三个类别,并将性别字段从缩写转换为完整表述。 ---
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值