Oracle CASE WHEN 是条件判断语句的核心语法,支持简单表达式和搜索表达式两种形式,可用于SELECT、WHERE、GROUP BY等子句中实现复杂逻辑判断,其执行顺序自上而下,首次满足条件则终止判断。
CASE WHEN 提供两种语法形式,满足不同场景需求:
1、 简单CASE表达式:直接匹配列值与条件值,适用于等值判断。
CASE 列名
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
ELSE 默认值
END
示例:CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END1
2、 搜索CASE表达式:支持更灵活的条件判断(如范围、不等式)。
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
ELSE 默认值
END
示例:CASE WHEN salary > 10000 THEN '高管' WHEN salary BETWEEN 5000 AND 10000 THEN '高绩效' ELSE '普通' END
3、Oracle CASE WHEN 在语句中的应用场景
SELECT子句:动态计算列值。
SELECT grade,
COUNT(CASE WHEN sex = 1 THEN 1 ELSE NULL END) AS 男生数,
COUNT(CASE WHEN sex = 2 THEN 1 ELSE NULL END) AS 女生数
FROM students
GROUP BY grade;
(统计不同年级的男女学生人数)2
2. WHERE子句:条件筛选。
sqlCopy Code
SELECT *
FROM employees
WHERE CASE
WHEN deptno = 50 THEN salary > 6000
WHEN deptno = 60 THEN commission > 0.3
END;
(按部门动态筛选工资或提成比例)
3. GROUP BY子句:自定义分组逻辑。
SELECT
CASE WHEN hire_date < 2010 THEN '资深员工'
WHEN hire_date < 2020 THEN '在职员工'
ELSE '未入职'
END AS 员工分组,
COUNT(*) AS 人数
FROM employees
GROUP BY 员工分组;
(按入职时间分段统计人数)
4、注意事项与最佳实践
执行顺序:WHEN子句按书写顺序判断,首个满足条件即终止。
性能优化:
判断条件不超过10行时,优先使用DECODE函数(语法更简洁)。
避免遗漏ELSE子句,否则未匹配项返回NULL可能影响统计结果。
Oracle 23c新特性:支持逗号分隔的多值匹配,简化等值判断(如CASE salary WHEN 9000,12000 THEN '标准薪资')

836

被折叠的 条评论
为什么被折叠?



