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);

在這裏插入圖片描述

示例三

按部門統計員工人數,按照年份進行統

(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;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章