Oracle数据库高级查询综合示例

  • 灵活运用select语句解决实际的问题
  • 通过三个具体的示例,演示如何编写高效的查询语句

示例一

分页查询显示员工信息:显示员工号,姓名,月薪

  • 每页显示四条记录
  • 显示第二页的员工
  • 按照月薪降序排列

注意:rownum只能使用<, <=, 不能使用>, >=

select r, empno,ename,sal
from (select rownum r,empno,ename,sal
	  from (select rownum,empno,ename,sal
	  		from emp order by sal desc) el
	  where rownum<=8) e2
where r >=5;

在这里插入图片描述

示例二

(1)找到员工表中薪水大于本部门平均薪水的员工
参考运行结果一:

select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno= e.deptno);

在这里插入图片描述

参考运行结果一,执行效率:

explain plan for
select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno=e.deptno) ;

在这里插入图片描述

select * from table(dbms_xplan.display);

在这里插入图片描述
(2)找到员工表中薪水大于本部门平均薪水的员工
参考运行结果二:

select e.empno,e.ename,e.sal,d.avgsal
from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d
where e.deptno = d.deptno and e.sal > d.avgsal;

在这里插入图片描述
参考运行结果二,执行效率:

explain plan for
select e.empno,e.ename,e.sal,d.avgsal
from emp e, (select deptno,avg(sal) avgsal from emp group by deptno) d
where e.deptno = d.deptno and e.sal > d.avgsal;

在这里插入图片描述

select * from table(dbms_xplan.display);

在这里插入图片描述

扫描二维码关注公众号,回复: 11589139 查看本文章

示例三

按部门统计员工人数,按照年份进行统

(1)使用函数解决

select count(*) Total,
	   sum(decode(to_char(hiredate,'YYYY'),'1980',1,0)) "1980",
	   sum(decode(to_char(hiredate,'YYYY'),'1981',1,0)) "1981",
	   sum(decode(to_char(hiredate,'YYYY'),'1982',1,0)) "1982",
	   sum(decode(to_char(hiredate,'YYYY'),'1987',1,0)) "1987"
from emp;

在这里插入图片描述

(2)使用子查询解决

select
	(select count(*) from emp) Total,
	(select count(*) from emp where to_char (hiredate, 'yyyy')='1980') "1980",
	(select count(*) from emp where to_char (hiredate, 'yyyy')='1981') "1981",
	(select count(*) from emp where to_char (hiredate, 'yyyy')='1982') "1982",
	(select count(*) from emp where to_char (hiredate, 'yyyy')='1987') "1987"
from dual;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hyh17808770899/article/details/106802662
今日推荐