关于Scott Schema下emp和dept表的查询练习

在scott用户下的emp和dept表中查询:

emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

dept(deptno,dname,loc)


1,查询平均工资最高的那个部门的名称,最高工资,最低工资,平均工资。

分解:

          首先查找出平均工资最高的部门的部门编号:

select deptno from (select deptno,avg(sal) from emp group by deptno order by avg(sal) desc)  where rownum=1;

          然后求部门名称,最高工资、最低工资、平均工资


select d.dname,max(e.sal) 最高工资,min(e.sal) 最低工资,avg(e.sal) 平均工资

from emp e ,dept d where  e.deptno=d.deptno and e.deptno =

                                              (select deptno from

                                              (select deptno,avg(sal) from emp

                                                    group by deptno order by avg(sal) desc) where rownum=1)

group by d.dname;

select     d.dname   部门名称,
min(e.sal)   最低工资,
max(e.sal)   最高工资,
avg(e.sal)   平均工资
from   emp   e,dept   d   where   e.deptno   =   d.deptno  
and   d.deptno   =   (select   aa.deptno   from   (select   avg(sal)   as   avgsal,deptno   from   emp   group   by   deptno)   aa  
where   aa.avgsal   =   (select   MAX(avgsal)   from  
(select   avg(sal)   as   avgsal,deptno   from   emp   group   by   deptno)))
group   by   d.dname;


2,求工资由高到低,排名第三的员工姓名

select * from (select rownum rank,d.* from (select * from emp order by sal desc) d) where rank=3;

select * from (select * from emp order by sal desc) where rownum<4

minus

select * from (select * from emp order by sal desc) where rownum<3;


3,求当前系统的日期,不要年和月。

select to_char(sysdate,'dd:hh24:mi:ss') from dual;


4,查询处员工人数最多的那个部门的

             部门编号,部门名称,部门人数

select   e.deptno     部门编号,
  d.dname     部门名称,
count(*)   部门人数
from   emp   e,dept   d   where   e.deptno   =   d.deptno   and   e.deptno   =
(select   deptno   from
(select   count(empno)   as   empno_count,deptno   from   emp   group   by   deptno   order   by   empno_count   desc)   where   rownum   =   1)
group   by   e.deptno,d.dname;


5,查询工资成本最高的那个部门的
              部门编号,部门名称,部门月工资成本

select   e.deptno   as   部门编号,
              d.dname   as   部门名称,
              sum(e.sal)   as   部门月工资成本
from   emp   e,dept   d   where   e.deptno   =   d.deptno   and   e.deptno   =
(select   deptno   from
(select   sum(sal)   as   sum_sal,deptno   from   emp   group   by   deptno   order   by   sum_sal   desc)   where   rownum   =   1)
group   by   e.deptno,d.dname;


6,按   某某人   的上级是   某某人  的格式查询处所有员工的信息,
            如果某某人没有上级,则上级的名字为“未知”

select   a.ename   as   员工   ,nvl(b.ename, '未知 ')as   上级   from   emp   a,emp   b  
where   a.mgr   =   b.empno(+)

7,查询处在公司工作时间最长的员工信息
            部门名称,员工姓名,在公司工作的时间

select   d.dname   as   部门名称,ename   as   员工姓名,   sysdate-hiredate   as   工作时间   from   emp   e,dept   d  
where   e.deptno   =   d.deptno  
and   e.hiredate   =   (select   aa.min_hiredate   from   (select   min(hiredate)   min_hiredate   from   emp)   aa  
  where   aa.min_hiredate   =   (select   min(hiredate)   from   emp))


8,显示裁员信息,例如,那个部门只有一个就不裁,若部门员工人数大于1人,则裁员工工资最高的那个人。

select   ename   as   员工姓名,deptno   as   员工部门,sal   as   工资   from   emp
where   sal   in(select   max(sal)   from   emp   where   deptno   in
(select   deptno   from   emp   group   by   deptno   having   count(*)   >   1)   group   by   deptno)


9,给工资不到部门平均工资的那些人加上部门平均工资的5%

select ename,(avgsal*0.05+e1.sal) newsal from emp e1,(select deptno,avg(sal) avgsal

from emp group by deptno) e2

where e1.deptno=e2.deptno

and e1.sal<e2.sal;


10,查找出各个部门工资前3名的员工信息

             select deptno, ename, sal     

             from emp e1    

             where      

             (  select count(1from emp e2    

             where e2.deptno=e1.deptno and e2.sal>=e1.sal   ) <=3 /*这里的数值表示你想取前几名*/  

             order by deptno, sal desc; 

利用分析函数

select * from        

         (select deptno,ename,sal,row_number() over (partition by deptno        

               order by sal desc) rn        

               from emp)         

          where rn<3;




你可能感兴趣的:(关于Scott Schema下emp和dept表的查询练习)