关于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;
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;
相关文章推荐
- 有关Oracle 的查询语句的几个小练习(针对ORCL数据库的emp,dept,salgrade等数据表)
- sql语句两个练习 emp dept 复杂查询
- oracle 关于scott 下emp dept表的修复
- oracle数据库scott用户下的EMP表、DEPT表的各种查询
- mysql数据库练习sql语句用到的emp与dept表结构和数据
- oracle下scott用户的四张表(emp,dept,bonus,salgrade)的建表语句:
- Oracle通过scott用户中的emp练习单表操作
- Oracle的关于建表,约束,查询等的练习
- Oracle10g学习笔记之Scott的所有表结构及字段含义之EMP,DEPT ,BONUS,SALGRADE表
- oracle scott 用户下emp,dept,bonus等表的关联查询
- SQL练习1关于插入删除,修改,单表查询
- 根据Oracle数据库scott模式下的scott.emp表和dept表,完成下列操作.
- Oracle10g学习笔记之Scott的所有表结构及字段含义(一) EMP,DEPT ,BONUS,SALGRADE表
- sql :emp ,dept表经典练习
- Oracle的关于建表,约束,查询等的练习
- 数据库创建emp和dept练习表
- Oracle SQL基础练习【二】(emp,dept)
- oracle数据库scott用户下emp和dept表数据
- 关于SQL查询效率,100w数据,查询只要1秒
- 【CCIE知识点之练习】关于Cisco路由协议题和答案(中文)