### Oracle CASE 表达式的结构
基本形式上,Oracle中的CASE表达主要有两种类型:简单(Simple)CASE与搜索(Searched)CASE。
1. **简单CASE**:
sql
SELECT column_name,
CASE
WHEN condition THEN result_value_1
[WHEN ...]
ELSE default_result END AS alias
FROM table;
在此模式下,“condition”是针对“column_name”的一个或多个布尔测试。如果满足某个条件,则对应的THEN部分指定结果被选择并输出;如果不满足任何条件则执行ELSE子句的内容。
2. **搜索CASE**:
sql
SELECT
CASE
WHEN search_condition THEN result_expression_1
[WHEN ... ]
ELSE else-expression
END as_alias
FROM table;
搜索型CASE不依赖特定列名,而是直接对任意条件表达式(search_condition)求真伪性,然后根据匹配到的第一个TRUE条件给出相应的result_expression。
### 应用场景举例:
- 数据分类统计:
假设我们有一个员工表(EMPLOYEE),包含薪资(SALARY)字段,要按薪资范围划分等级。
sql
SELECT EmployeeID, Name,
CASE
WHEN SALARY <= 3000 THEN 'Low'
WHEN SALARY BETWEEN 3001 AND 6000 THEN 'Medium'
WHEN SALARY > 6000 THEN 'High'
ELSE 'Unknown'
END "Salary_Level"
FROM EMPLOYEE;
- 条件赋值操作:
如果需要动态地为某列赋予不同情况下的数值时,例如按照订单状态更新折扣率。
sql
UPDATE Orders SET Discount =
CASE Status
WHEN 'New' THEN 5
WHEN 'Processing' THEN 7
WHEN 'Shipped' THEN 9
ELSE 0 -- 默认情况下没有折扣
END ;
通过以上示例可以看出,Oracle CASE表达式为我们提供了灵活而精确的数据操纵手段,在复杂的商业智能分析、报表生成以及日常维护等众多实际应用场合均发挥着关键作用。其能够有效实现数据过滤、转换乃至运算的功能拓展了SQL本身的表现力,大大提升了工作效率。