1. 程式人生 > >oracle複雜查詢(一)

oracle複雜查詢(一)

1、 列出至少有一個員工的所有部門編號、名稱,並統計出這些部門的平均工資、最低工資、最高工資。

select d.DEPTNO 部門編號,d.DNAME 部門名稱,trunc(avg(e.SAL)) 平均薪資, min(e.SAL) 最低工資, max(e.SAL) 最高工資
from emp e, DEPT d WHERE e.DEPTNO(+)=d.DEPTNO GROUP BY d.DEPTNO,d.DNAME,d.LOC HAVING count(e.EMPNO)>0

 

2、 列出薪金比“MARTIN”或“ALLEN”多的所有員工的編號、姓名、部門名稱、其領導姓名。
SELECT e.EMPNO 員工編號, e.ENAME 姓名,d.DNAME 部門名稱,coalesce( e2.ENAME,'無領導')領導姓名
FROM EMP e, EMP e2, DEPT d WHERE e.MGR=e2.EMPNO(+) AND e.DEPTNO=d.DEPTNO
AND e.ENAME!='MARTIN' AND E.ENAME!='ALLEN' AND e.SAL > any(SELECT sal FROM EMP WHERE ENAME in('MARTIN','ALLEN'))

本題的重點是EMP的自關聯

 

3、 列出所有員工的編號、姓名及其直接上級的編號、姓名,顯示的結果按領導年工資的降序排列。

select e.EMPNO 員工編號,e.ENAME 員工姓名,coalesce(e2.EMPNO,0) 上級編號,coalesce(e2.ENAME,'無') 上級姓名,e.SAL*12 年薪
FROM EMP e,EMP e2 WHERE e.MGR=e2.EMPNO(+) ORDER BY e.SAL DESC

 

列出受僱日期早於其直接上級的所有員工的編號、姓名、部門名稱、部門位置、部門人數。
SELECT e1.EMPNO 員工編號,e1.ENAME 姓名,d.DNAME 部門名稱,d.LOC 部門位置,temp.sum 部門人數
FROM EMP e1,EMP e2,DEPT d,(SELECT DEPTNO dno, count(EMPNO) sum FROM EMP GROUP BY DEPTNO) temp
WHERE e1.MGR=e2.EMPNO(+) AND e1.HIREDATE>e2.HIREDATE AND e1.DEPTNO=d.DEPTNO AND temp.dno=d.DEPTNO