orcaleクエリー文は難しいです.部門別統計工数、従業員数が最も多い部門の第2位から第5位(部門名、部門位置をリスト)**

10015 ワード

1.キングが所属する部署の勤続年数が一番多い社員の名前を検索する
select ename from emp where hiredate in(select min(hiredate) from emp where deptno in(select deptno from emp where ename='KING'));

2.給与コストが最も高い部門の部門番号と部門名を照会する
select d.deptno,d.dname,t.sumsal from dept d,(select deptno,sum(sal) sumsal from emp group by deptno  having sum(sal)=(select max(sum(sal)) from emp group by deptno)) t where d.deptno=t.deptno;

3.キングが所属する部門の部門番号、部門名、部門人数を検索する
select t.countno,d.dname,d.loc from dept d,(
     select count(*) countno,deptno from emp where deptno in(
           select deptno from emp where ename='KING') group by deptno )t where d.deptno=t.deptno;

4.部門別統計工数、従業員数が最も多い部門の第2位から第5位(部門名、部門位置をリスト)
select dept.dname,dept.loc from (select rownum nno,deptno from (select count(*) employeesum,deptno from emp group by deptno order by employeesum desc)) e,dept where e.nno between 2 and 5 and e.deptno =dept.deptno;

5.部門に所属しない従業員の検索
 select * from emp where deptno is null or deptno not in(select deptno from dept);

6.検索先収入(給与・ボーナス)、部下が目上より高い従業員番号、従業員名、従業員収入
 select e.ename,e.empno,e.sal+nvl(e.comm,0) from emp e,emp m where e.mgr= m.empno and (e.sal+nvl(e.comm,0))>(m.sal+nvl(m.comm,0));

7.検索部署10と部署20のうち、給与が最高3位から5位までの社員の社員名、部署名、部署位置
 select emp.ename,dept.dname,dept.loc from emp,dept,(select rownum nno,new.* from (select * from emp where emp.deptno=10 or deptno=20 order by emp.sal desc)new )e 
 where emp.deptno=dept.deptno and e.nno>=3 and e.nno<=5 and e.empno= emp.empno;

9.毎月の給与総数が最も少ない部門の部門番号、部門名、部門位置を得る
  select * from dept where deptno=(select e.deptno from (select deptno,sum(sal) from emp group by deptno order by sum(sal)) e where rownum=1);

10.部門別平均給与等級2級(等級表)を取得した部門番号
 select new.dno from salgrade sa,(select deptno as dno,avg(sal) as avgsal from emp group by deptno) new where sa.grade=4 and new.avgsal between sa.losal and sa.hisal;

11.部門別給与が2000より大きい全従業員の平均給与、平均給与が2500より大きい
 select deptno,avg(sal) from emp where sal>2000 group by deptno having avg(sal)>2500;