在Oracle数据库中,CASE WHEN
语句是一个条件表达式,它允许你基于不同的条件执行不同的操作。该语句在SELECT
、UPDATE
、DELETE
语句以及PL/SQL块中都非常有用。下面是关于CASE WHEN
在Oracle中的详细用法:
一、基本语法
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE resultN
END
conditionX
:要评估的条件。resultX
:当对应条件为真(TRUE)时返回的结果。ELSE
子句是可选的,当所有WHEN
条件都不满足时,将返回ELSE
后面的结果。- 如果没有
ELSE
子句,且所有WHEN
条件都不满足,CASE
表达式将返回NULL
。
二、使用示例
1. 在SELECT语句中使用
-
简单CASE表达式:
SELECT column1,
CASE column2
WHEN 'value1' THEN 'result1'
WHEN 'value2' THEN 'result2'
...
ELSE 'result'
END AS result_column
FROM table;
-
搜索CASE表达式:
SELECT column1,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END AS result_column
FROM table;
2. 在UPDATE语句中使用
假设我们有一个名为employees
的表,我们想要根据薪水给员工分类,并更新salary_category
列:
UPDATE employees
SET salary_category = CASE
WHEN salary < 3000 THEN 'Low'
WHEN salary BETWEEN 3000 AND 7000 THEN 'Medium'
WHEN salary > 7000 THEN 'High'
ELSE 'Unknown'
END;
3. 在WHERE子句中使用
虽然直接在WHERE
子句中使用CASE WHEN
并不常见,但它是可能的。通常,这种用法是为了实现更复杂的筛选条件。例如:
SELECT *
FROM table
WHERE CASE
WHEN condition1 THEN true
WHEN condition2 THEN true
ELSE false
END = true;
但请注意,上述查询在性能上可能不是最优的,并且有更简单的方法来实现相同的筛选条件。
三、注意事项
WHEN
的执行顺序:当“第一个”WHEN
满足条件时,便结束查询(不会继续判断其它的WHEN
条件)。ELSE
子句是可选的,但在PL/SQL中,如果省略了ELSE
子句且没有条件满足,将直接报错。- 在某些情况下,当
CASE WHEN
和DECODE
函数等价,且判断语句不超过一定数量时(如10行),使用DECODE
可能更简洁。
希望这可以帮助你更好地理解和使用Oracle中的CASE WHEN
语句。