您的位置:首页 > 数据库 > Oracle

oracle之高级查询练习

2016-03-04 00:25 627 查看
学习oracle三天了,今天学习了oracle高级查询,接下来,试着用这几天所学,完成下面的练习题,答案附在后面。

1)写SQL语句,查询哪个部门的平均工资是最高的,列出部门编码、平均工资。

2)写SQL语句,列出各个部门中工资最高的员工的信息:名字、部门号、工资。

3)写SQL语句,查询管理者是“KING”的员工姓名(ename)和工资(sal)。

4) 写SQL语句,查询部门所在地(loc)为“NEW YORK”的部门的员工的姓名(ename),部门名称(dname)和岗位名称(job)。

5)写SQL语句,查询工资比公司平均工资高的所有员工的员工号(empno), 姓名(ename)和工资(sal)。

6)写SQL语句,查询姓名中包含字母“u”的员工在相同部门的员工的员工号(empno)和姓名(ename)。

7)写SQL语句,查询哪些员工的薪水比本部门的平均薪水低。

8) 查询emp表前5条记录

9) 查询第3-5条记录,无需排序

10) 查询公司工资最高的三个人

11) 查询公司工资最低的五个人

本练习所选用表格,请参照:

/article/3701936.html

========================答案:============================

--1) 写SQL语句,查询哪个部门的平均工资是最高的,列出部门编码、平均工资。
select t2.deptno,t2.avgsal from
(select t1.deptno deptno,t1.avgsal avgsal,rownum rn from
(select deptno,avg(sal) avgsal from emp group by deptno order by avg(sal) desc)t1)t2 where t2.rn=1;
--2) 写SQL语句,列出各个部门中工资最高的员工的信息:名字、部门号、工资。
select t1.ename,t1.deptno,t1.sal from(
select ename,deptno,sal,ROW_NUMBER()over(partition by deptno order by sal) salrank from emp)t1 where t1.salrank=1;
--3) 写SQL语句,查询管理者是“KING”的员工姓名(ename)和工资(sal)。
select m.ename m,w.ename wename from emp w,emp m where w.mgr=m.empno;--查询出每个员工的管理者
select t1.wename,t1.wsal,t1.mename from (select m.ename mename,w.ename wename,w.sal wsal from 
emp w,emp m where w.mgr=m.empno) t1 where t1.mename = 'king';
--4) 写SQL语句, 查询部门所在地(loc)为“NEW YORK”的部门的员工的姓名(ename),部门名称(dname)和岗位名称(job)。
select deptno from dept  where loc='new york';--查出部门所在地为new york部门号
select ename ,dname ,job from emp ,dept where emp.deptno=dept.deptno and
dept.loc = (select loc from dept  where loc='new york');
--5) 写SQL语句,查询工资比公司平均工资高的所有员工的员工号(empno), 姓名(ename)和工资(sal)。
select avg(nvl(sal,0)) from emp;--公司平均工资
select empno,ename,sal from emp where sal>(select avg(nvl(sal,0)) from emp);
--6) 写SQL语句,查询姓名中包含字母“u”的员工在相同部门的员工的员工号(empno)和姓名(ename)。
select ename from emp where ename like'%u%';--查询名字包含字母u的员工
select empno,ename,sal from emp where ename =(select ename from emp where ename like'%u%');
--7) 写SQL语句,查询哪些员工的薪水比本部门的平均薪水低。
select deptno,avg(sal) from emp group by deptno;--查询每个部门的平均薪水
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno)t1 
where emp.deptno=t1.deptno and emp.sal<t1.avgsal;
--8) 查询emp表前5条记录
select * from
(select e.*,rownum rn from emp e)t1 where t1.rn<=5;
--9) 查询第3-5条记录,无需排序
select * from
(select e.*,rownum rn from emp e)t1 where t1.rn between 3 and 5;
--10) 查询公司工资最高的三个人
select * from
(select salrank.*,rownum rn from
(select e.* from emp e order by e.sal desc)salrank)t where t.rn<=3;
--11) 查询公司工资最低的五个人
select * from
(select salrank.*,rownum rn from
(select e.* from emp e order by e.sal asc)salrank)t where t.rn<=5;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: