oracle case when 的用法

在Oracle数据库中,CASE WHEN语句是一个条件表达式,它允许你基于不同的条件执行不同的操作。该语句在SELECTUPDATEDELETE语句以及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 WHENDECODE函数等价,且判断语句不超过一定数量时(如10行),使用DECODE可能更简洁。

希望这可以帮助你更好地理解和使用Oracle中的CASE WHEN语句。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值