《Oracle Database编程指南》14-03:CASE表达式(CASE Expressions)

Chloe ·
更新时间:2024-11-01
· 667 次阅读

封面:扫描上图二维码关注课程

内容导航1、定义2、分类3、简单CASE表达式3.1、示例13.2、示例23.3、案例33.4、案例43.5、案例53.6、独立案例: 1、定义

CASE表达式让我们使用IF ... THEN ... ELSE逻辑,而不必调用过程。

CASE表达式语法图

2、分类

CASE表达式分为简单CASE表达式和搜索CASE表达式。

3、简单CASE表达式

在一个简单的CASE表达式中,当表达式expr的值等于比较表达式comparison_expr的值时,则执行返回表达式return_expr的值。如果没有满足expr这个条件,并且存在一个ELSE子句,将返回else_expr的值。否则,Oracle返回null。

语法格式

SELECT CASE WHEN 条件 THEN 返回值 WHEN 条件 THEN 返回值 ELSE 返回值 END 列别名 FROM 表名或视图;

测试数据

SELECT * FROM emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 Smith CLERK 7902 17-12月-80 800 20 7499 Allen SALESMAN 7698 20-2月 -81 1600 300 30 7521 Ward SALESMAN 7698 22-2月 -81 1250 500 30 7566 Jones MANAGER 7839 02-4月 -81 2975 20 7654 Martin SALESMAN 7698 28-9月 -81 1250 1400 30 7698 Blake MANAGER 7839 01-5月 -81 2850 30 7782 Clark MANAGER 7839 09-6月 -81 2450 10 7839 King PRESIDENT 17-11月-81 5000 10 7844 Turner SALESMAN 7698 08-9月 -81 1500 0 30 7900 James CLERK 7698 03-12月-81 950 30 7902 Ford ANALYST 7566 03-12月-81 3000 20 7934 Miller CLERK 7782 23-1月 -82 1300 10 9999 At CEo 08-3月 -20 10000 已选择 13 行。 3.1、示例1

代码:

/* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- SELECT empno, ename, sal, CASE WHEN sal > 2000 THEN '满足条件' ELSE '不满足条件' END AS "result" , job FROM emp;

执行结果:

EMPNO ENAME SAL resul JOB ---------- ---------- ---------- ----- --------- 7369 Smith 800 不满足条件 CLERK 7499 Allen 1600 不满足条件 SALESMAN 7521 Ward 1250 不满足条件 SALESMAN 7566 Jones 2975 满足条件 MANAGER 7654 Martin 1250 不满足条件 SALESMAN 7698 Blake 2850 满足条件 MANAGER 7782 Clark 2450 满足条件 MANAGER 7839 King 5000 满足条件 PRESIDENT 7844 Turner 1500 不满足条件 SALESMAN 7900 James 950 不满足条件 CLERK 7902 Ford 3000 满足条件 ANALYST 7934 Miller 1300 不满足条件 CLERK 9999 At 10000 满足条件 CEo 已选择 13 行。 3.2、示例2

代码:

/* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- SELECT empno, ename, sal, CASE WHEN sal > 2000 THEN '满足条件' END AS "result" , job FROM emp;

执行结果:

EMPNO ENAME SAL resu JOB ---------- ---------- ---------- ---- --------- 7369 Smith 800 CLERK 7499 Allen 1600 SALESMAN 7521 Ward 1250 SALESMAN 7566 Jones 2975 满足条件 MANAGER 7654 Martin 1250 SALESMAN 7698 Blake 2850 满足条件 MANAGER 7782 Clark 2450 满足条件 MANAGER 7839 King 5000 满足条件 PRESIDENT 7844 Turner 1500 SALESMAN 7900 James 950 CLERK 7902 Ford 3000 满足条件 ANALYST 7934 Miller 1300 CLERK 9999 At 10000 满足条件 CEo 已选择 13 行。 3.3、案例3

代码:

/* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- SELECT empno, ename, CASE WHEN JOB = 'CLERK' THEN '办事员' WHEN JOB = 'SALESMAN' THEN '销售员' WHEN JOB = 'MANAGER' THEN '经理' WHEN JOB = 'PRESIDENT' THEN '董事长' ELSE '未知职位' END newjob, comm, deptno FROM emp;

执行结果:

EMPNO ENAME NEWJ COMM DEPTNO ---------- ---------- ---- ---------- ---------- 7369 Smith 办事员 20 7499 Allen 销售员 300 30 7521 Ward 销售员 500 30 7566 Jones 经理 20 7654 Martin 销售员 1400 30 7698 Blake 经理 30 7782 Clark 经理 10 7839 King 董事长 10 7844 Turner 销售员 0 30 7900 James 办事员 30 7902 Ford 未知职位 20 7934 Miller 办事员 10 9999 At 未知职位 已选择 13 行。 3.4、案例4

代码:

/* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- SELECT empno, ename, CASE WHEN comm IS NULL THEN '不发奖金' WHEN comm IS NOT NULL THEN '发奖金' || comm ELSE '发生未知情况' END commdesc, comm, deptno FROM emp;

执行结果:

EMPNO ENAME COMMDESC COMM DEPTNO ---------- ---------- ------------------------------------------- ---------- ---------- 7369 Smith 不发奖金 20 7499 Allen 发奖金300 300 30 7521 Ward 发奖金500 500 30 7566 Jones 不发奖金 20 7654 Martin 发奖金1400 1400 30 7698 Blake 不发奖金 30 7782 Clark 不发奖金 10 7839 King 不发奖金 10 7844 Turner 发奖金0 0 30 7900 James 不发奖金 30 7902 Ford 不发奖金 20 7934 Miller 不发奖金 10 9999 At 不发奖金 已选择 13 行。 3.5、案例5

代码:

/* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- SELECT CASE WHEN 'Red' = 'Red' THEN '停止' WHEN 'Green' = 'Green' THEN '通行' WHEN 'Yellow' = 'Yellow' THEN '等待' ELSE '灯坏咧!' END AS "交通提示" FROM DUAL;

执行结果:

交通提示 ---- 停止 3.6、独立案例: /* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书:https://www.jianshu.com/u/8a6075d7a2e0 说明: 注意: */ ------------------------------------------------------------------------------- --创建表 CREATE TABLE platuser( Sex VARCHAR2(1) ); ------------------------------------------------------------------------------- --修改表 ALTER TABLE platuser Add ( ID Varchar2(32) ); ALTER TABLE platuser ADD ( NAME VARCHAR2(26) ); ------------------------------------------------------------------------------- --删除表 DROP TABLE platuser; ------------------------------------------------------------------------------- --查询表 select * from platuser; ------------------------------------------------------------------------------- --插入数据 --整行插入 Insert into PlatUser values('1','0001','Tom'); --指定列插入 INSERT INTO platuser(sex,NAME ,ID) VALUES('0','Jhon','002'); Insert into PlatUser(Sex,Name ,ID) VALUES('0','Alis','003'); ------------------------------------------------------------------------------- --测试Case表达式. SELECT ID ,NAME,CASE WHEN sex = '1' THEN '男' WHEN sex = '0' THEN '女' ELSE '未知' END AS sex FROM platuser;

执行结果:

ID NAME SE -------------------------------- -------------------------- -- 0001 Tom 男 002 Jhon 女 003 Alis 女 查看专栏详情 立即解锁全部专栏
作者:AT阿宝哥



DATABASE case Oracle

需要 登录 后方可回复, 如果你还没有账号请 注册新账号