Orcale数据库练习题 男人看了会沉默,女人看了会流泪

– 1. 取得每个部门最高薪水的人员名称

– (1).in接受参数

select ename "姓名", sal "工资" , deptno "部门编号"
from emp 
where sal in(select max(sal)
from emp
group by deptno);

– (2)内连接

select  e.ename "姓名", e.sal "工资" , e.deptno "部门编号"
from emp e ,(
select deptno, max(sal) maxsal
from emp
group by deptno
)e1
where (e.deptno = e1.deptno) and(sal = e1.maxsal);

在这里插入图片描述

– 2.取得部门中(所有人的)平均的薪水等级

select deptno ,avg(grade)"平均的薪水等级"
from (select e.empno, e.ename,e.deptno,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal)
group by deptno;

在这里插入图片描述

–3 不准用组函数(Max),取得最高薪水(给出两种解决方案)

– 第一种 很简单的方法 rownum

select *
from(
select * from emp order by sal desc)
where rownum=1;

–第二种

select * 
from emp
where sal not in(
select distinct e1.sal
from emp e1,emp e2
where e1.sal<e2.sal);

在这里插入图片描述

– 4取得平均薪水最高的部门的部门编号(至少给出两种解决方案)

– 第一种 使用rownum

select deptno "平均薪水最高的部门"
from(
select avg(sal),e.deptno
from emp e,dept d
where e.deptno = d.deptno
group by e.deptno
order by deptno asc)
where rownum =1;

–第二种:

Select deptno 
from emp 
group by deptno
having avg(sal) = (
select max(avg(sal)) from emp group by deptno)

在这里插入图片描述

–5.哪些人的薪水在部门的平均薪水之上

select e1.ename "姓名",e1.sal "工资",deptno "部门编号"
from emp e1
where sal>(
select avg(sal)
from emp e2
group by deptno
having e1.deptno= e2.deptno
);

在这里插入图片描述

–6.取得平均薪水最高的部门的部门名称

select dname "部门名称"
from dept d
-- 根据id 关联两个表
where d.deptno=(
-- 求出的是最高工资的部门编号
select deptno 
from emp
group by deptno
having avg(sal)=
(select max(avg(sal))
from emp
group by deptno)
)

在这里插入图片描述

–7.求平均薪水的等级最低的部门的部门名称

-- 1.每个部门的平均工资 
select avg(sal),deptno 
from emp 
group by deptno
-- 2.每个部门的平均工资的等级
select t.*,s.grade
from salgrade s ,(
select avg(sal) asal
from emp 
group by deptno) t
where t.asal between s.losal and s.hisal;

-- 3.最低部门的编号 和 工资等级
select deptno
from(select t.*,s.grade
from salgrade s ,(
select deptno, avg(sal) asal
from emp 
group by deptno) t
where t.asal between s.losal and s.hisal
order by grade asc)
where rownum=1

-- 4.根据部门编号(Id)进行表的关联
select dname
from dept d
where d.deptno=(
select deptno
from(select t.*,s.grade
from salgrade s ,(
select deptno, avg(sal) asal
from emp 
group by deptno) t
where t.asal between s.losal and s.hisal
order by grade asc)
where rownum=1);

在这里插入图片描述

– 8 取得比普通员工(员工代码没有在mgr字段上出现的) 的最高薪水还要高的经理人姓名

select e.ename, e.sal 
from emp e 
where e.empno in (Select distinct mgr from emp where mgr is not null) 
and
e.sal > (
select max(sal) maxSal 
from emp
where empno not in (Select distinct mgr from emp where mgr is not null))

在这里插入图片描述

–9 获得薪水最高的前五名员工

在这里插入图片描述

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

或者

select *
from(
select rownum r , e.*
from (
select ename,sal 
from emp
order by sal desc
)e
where rownum<=5
)
where r>0;

在这里插入图片描述

–10 取得薪水最高的第六到第十名员工

 select *
  from(
  select rownum  ,t.*
  from (
    select  sal "工资",ename "员工"  
    from emp
    order by sal desc
    ) t
    where rownum<=10
)
  where rownum<=6;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/agood_man/article/details/108685317