Oracle CASE表达式

本文介绍如何在SQL中使用CASE表达式实现条件判断逻辑,包括简单CASE表达式和搜索CASE表达式的语法及示例。

CASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。

CASE有两种表达式:

1. 简单CASE表达式,使用表达式确定返回值.

语法:

CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
ELSE default_result
END

例:

select product_id,product_type_id,
case product_type_id
when 1 then 'Book'
when 2 then 'Video'
when 3 then 'DVD'
when 4 then 'CD'
else 'Magazine'
end
from products

结果:

PRODUCT_ID PRODUCT_TYPE_ID CASEPROD
---------- --------------- --------
         1               1                             Book
         2               1                             Book
         3               2                              Video
         4               2                             Video
         5               2                             Video
         6               2                            Video
         7               3                             DVD
         8               3                             DVD
         9               4                              CD
        10               4                               CD
        11               4                             CD
        12                                            Magazine

12 rows selected.

2. 搜索CASE表达式,使用条件确定返回值.

语法:

CASE

WHEN condition1 THEN result1
WHEN condistion2 THEN result2
...
WHEN condistionN THEN resultN
ELSE default_result
END

例:

select product_id,product_type_id,
case
when product_type_id=1 then 'Book'
when product_type_id=2 then 'Video'
when product_type_id=3 then 'DVD'
when product_type_id=4 then 'CD'
else 'Magazine'
end
from products

结果与上相同.

Oracle 数据库中,`CASE WHEN` 表达式是一种强大的条件逻辑工具,允许根据不同的条件返回不同的结果。它可以在 `SELECT`、`UPDATE`、`DELETE` 语句以及 PL/SQL 块中使用,支持两种主要形式:**简单 CASE 函数** 和 **搜索 CASE 函数**。 ### 简单 CASE 函数 简单 CASE 函数用于将某个表达式与一组可能的值进行比较,并返回相应的结果。其语法如下: ```sql CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END ``` 此形式适用于表达式与固定值的直接比较。例如: ```sql SELECT ename, CASE deptno WHEN 10 THEN 'Accounting' WHEN 20 THEN 'Research' WHEN 30 THEN 'Sales' ELSE 'Unknown Department' END AS department FROM emp; ``` 此查询将根据 `deptno` 的值返回对应的部门名称[^1]。 ### 搜索 CASE 函数 搜索 CASE 函数更为灵活,允许使用布尔表达式作为条件判断。其语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 例如,根据员工的工资水平分类: ```sql SELECT ename, sal, CASE WHEN sal < 1000 THEN 'Low' WHEN sal BETWEEN 1000 AND 3000 THEN 'Medium' WHEN sal > 3000 THEN 'High' ELSE 'Unknown' END AS salary_level FROM emp; ``` 此查询将根据 `sal` 字段的值返回对应的薪资等级[^3]。 ### 使用注意事项 - `CASE` 表达式中的 `ELSE` 子句是可选的。如果省略 `ELSE` 且没有匹配的条件,表达式将返回 `NULL`。 - 在简单 CASE 函数中,要求 `WHEN` 子句后的值与 `CASE` 后的表达式类型一致,否则可能导致类型转换错误。 - `CASE` 表达式在性能上通常优于多个 `DECODE` 函数嵌套,特别是在条件较多或逻辑较复杂的情况下。 ### 示例:结合聚合函数使用 `CASE` 表达式也可以与聚合函数一起使用,以实现更复杂的分析需求。例如,统计不同部门中员工的数量: ```sql SELECT CASE deptno WHEN 10 THEN 'Accounting' WHEN 20 THEN 'Research' WHEN 30 THEN 'Sales' ELSE 'Other' END AS department, COUNT(*) AS employee_count FROM emp GROUP BY CASE deptno WHEN 10 THEN 'Accounting' WHEN 20 THEN 'Research' WHEN 30 THEN 'Sales' ELSE 'Other' END; ``` 此查询将返回每个部门的员工人数,并将部门编号映射为部门名称[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值