CASE表达式让我们使用IF ... THEN ... ELSE
逻辑,而不必调用过程。
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 女
查看专栏详情
立即解锁全部专栏