您的位置:首页 > 其它

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

2012-05-17 15:13 393 查看
在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(1) from 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: