欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Oracle基础知识(四)

Oracle基础知识(四)

2025/7/1 16:39:24 来源:https://blog.csdn.net/Helen_1997_1997/article/details/148175026  浏览:    关键词:Oracle基础知识(四)

目录

1.DECODE

2.CASE  WHEN 

写法1:CASE WHEN deptno=值

写法2:CASE deptno WHEN 值

case结合between写法

3.拼接字符:||


1.DECODE

DECODE 局限:只能用等值判断

DECODE函数语法:

DECODE(判断的字段,判断值1,返回值1,判断值2,返回值2,...,默认值);

示例:EMP表需要将英文的工作转换成中文

     SALESMAN → 销售  MANAGER → 经理  PRESIDENT → 老板  其它的 → 职员

--DECODE写法
SELECT JOB, DECODE(JOB, 'SALESMAN', '销售', 'MANAGER', '经理', 'PRESIDENT', '老板', '职员') 中文
FROM EMP;

注意:最后的 ELSE 返回场景可以不写,默认返回为空 

2.CASE  WHEN 

CASE WHEN 条件1 THEN 返回值1WHEN 条件2 THEN 返回值2ELSE 默认值  ---默认值 可以写也可以不写END;

注意:CASE WHEN 可以用多条件 以及 不等值判断

case when支持不等式写法,decode不支持

示例:输出dept表的部门名称 10 → 销售部 20 → 经理部 30 → 市场部 40 → 运营部

写法1:CASE WHEN deptno=值

SELECT CASEWHEN DEPTNO = 10 THEN '销售部'WHEN DEPTNO = 20 THEN '经理部'WHEN DEPTNO = 30 THEN '市场部'WHEN DEPTNO = 40 THEN '运营部'END
FROM DEPT;

写法2:CASE deptno WHEN 值

SELECT CASE DEPTNOWHEN 10 THEN '销售部'WHEN 20 THEN '经理部'WHEN 30 THEN '市场部'END
FROM DEPT;

示例:给每个员工一个员工级别,薪资在1000以内是低级,[1000,2000]是中级,2000以上是高级

SELECT EMPNO,CASEWHEN SAL < 1000 THEN '低级'WHEN SAL BETWEEN 1000 AND 2000 THEN '中级'WHEN SAL > 2000 THEN '高级'END GRADE
FROM EMP;-- 计算薪资等级是低级的员工数
SELECT COUNT(CASE WHEN SAL < 1000 THEN 1 END)
FROM EMP;

case结合between写法

CASE WHEN END 最终是返回某个字段值,所有可以用字段的地方都可以使用CASE WHEN END

示例:统计薪资在1000~2000区间的人数 2001~3000的人数以及1000以下的人数,以及 3000 以上的人数

SELECT COUNT(CASE WHEN SAL BETWEEN 1000 AND 2000 THEN EMPNO END) "统计薪资在1000~2000区间的人",COUNT(CASE WHEN SAL BETWEEN 2001 AND 3000 THEN EMPNO END) "统计薪资在2001~3000区间的人",COUNT(CASE WHEN SAL < 1000 OR SAL > 3000 THEN EMPNO END)  "统计薪资在2001~3000区间的人"
FROM EMP;

计算每个部门中工资高于1500的人数占整个部门的人数比例

select deptno,round(count(casewhen sal > 1500 then1end) / count(1),4) * 100 || '%' as ctfrom empgroup by deptno; 

 

将 EMP表的 英文岗位 替换成中文岗位名称(两种方法实现)

select job,decode(job,'CLERK','职员','SALESMAN','销售员','PRESIDENT','老板','MANAGER','经理','ANALYST','分析师') as ch_jobfrom empgroup by job;select job,case jobwhen 'CLERK' then'职员'when 'SALESMAN' then'销售员'when 'PRESIDENT' then'老板'when 'MANAGER' then'经理'else'分析师'end as ch_jobfrom empgroup by job;

3.拼接字符:||

【例】在EMP表中,查询工资在2000元以上的姓名以及工作。预期效果:SCOTT is a ANALYST

SELECT (ENAME || ' is a ' || JOB) AS "Employee Details"
FROM EMP
WHERE SAL > 2000;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词