oracle homework2

Oracle作业

课堂练习:

1、要求查出员工的编号,员工的姓名,部门的编号,部门

名称和部门位置

selecte.empno,e.ename,d.deptno,d.dname,d.loc from empe,dept d where e.deptno=d.deptno ;

2、要求查出每个员工的姓名,工作,雇员的直接上级领导

的姓名

selecte.ename,e.job,m.ename from empe,emp m where

e.mgr=m.empno;

3、要求查出每个员工的姓名,工作,雇员的直接上级领导

的姓名及员工所在部门名称

selecte.ename,e.job,m.ename,d.dname from empe,empm,dept d where e.mgr =m.empno and

e.deptno=d.deptno;

4、要求查询出每个员工的姓名、工资、部门名称、工资在

公司的等级和领导的姓名及领导的工资在公司的等级

select

e.ename,e.sal,d.dname,es.grade,m.ename,ms.grade from

empe,empm,salgradees,salgradems,dept d where

e.mgr=m.empno and e.sal between es.losal and es.hisal

and e.deptno=d.deptno and m.sal between ms.losal and ms.hisal;

5、工资等级按照第一等级,第二等级的形式输出,使用

DECODE函数

select e.ename,e.sal,d.dname,decode(es.grade,5,'第一等

工资',4,'第二等工资',3,'第三等工资',2,'第四等工资',1,'第五等工资'),m.ename,m.sal,decode(ms.grade,5,'第一

等工资',4,'第二等工资',3,'第三等工资',2,'第四等工资

',1,'第五等工资') from

empe,empm,salgradees,salgradems,dept d where

e.mgr=m.empno and e.sal between es.losal and es.hisal

and e.deptno=d.deptno and m.sal between ms.losal and ms.hisal;

6、查询出员工的编号,姓名及领导的编号及姓名

selecte.empno,e.ename,m.ename,m.mgr from empe,emp m where e.mgr=m.empno(+);

分组统计

1、求出每个部门的员工数量,应该按照部门编号分组

selectdeptno,count(*) from emp group by deptno;

2、求每个部门的平均工资

selectdeptno,avg(sal) from emp group by deptno;

3、要求按部门分组,并显示部门的名称,及每个部门的员

工数。

selectd.dname,count(e.empno) from empe,dept d where

e.deptno(+)=d.deptno group by d.dname;

4、要求显示出平均工资大于2000的部门编号和平均工资

selectdeptno,avg(sal) from emp group by deptno having avg(sal)>2000;

5、显示非销售人员工作名称以及从事同一工作的员工的

工资总和,并且要满足从事同一工作的员工工资总和大于5000,输出结果按工资降序排列。

selectjob,sum(sal) from emp where job <>'SALESMAN'group by job having sum(sal)>5000 order by sum(sal) desc;

6、求出平均工资最高的部门工资

select max(deptno),max(avg(sal)) from emp group by deptno;

作业部分;

1、查询至少有1个员工的部门信息

select d.*,ed.count from dept d,(select deptno,count(empno) count from emp group by deptno having count(empno)>1) ed where d.deptno=ed.deptno;

2、列出所有工资比SMITH高的所有员工

select * from emp where sal>(select sal from emp where ename ='SMITH');

3、列出所有员工的姓名和直接上级的姓名

selecte.ename,m.ename from empe,emp m where

e.mgr=m.empno(+);

4、列出受雇比直接上级要早的员工的编号,姓名,和所在

部门名称

selecte.empno,e.ename,m.ename,d.dname from empe,empm,dept d where e.mgr=m.empno and

e.hiredate

5、分组列出部门名称和这些部门的员工信息,同时列出没

有员工的部门

select d.dname,d.deptno,e.empno,e.ename from emp

e ,dept d where e.deptno(+)=d.deptno;

6、列出所有办事员的姓名及部门名称,部门的人数

selecte.ename,d.dname, ed.cu from empe,dept d,(select deptno,count(empno) cu from emp e group by deptno) ed where job='CLERK' and e.deptno=d.deptno and ed.deptno=e.deptno;

7、列出工资低于1500的各种工作及从事此工作的员工数

selectjob,count(*) from emp e group by job having min(sal)<1500;

8、列出销售部员工的姓名

selectename from emp e where e.job ='SALESMAN';

9、列出工资高于公司平均工资的所有员工的姓名,所在部

门,上级领导及工资的等级

select e.ename,dname,m.ename,grade from empe,empm,deptd,salgrade s where e.mgr=m.empno and

e.deptno=d.deptno and e.sal>(select avg(sal) from emp)

and m.sal between s.losal and s.hisal;

10、列出与SCOTT从事相同工作的所有员工及部门名称

select e.empno,e.ename,e.job,e.sal,d.dname from empe,dept d where e.deptno=d.deptno and job = (select job from emp where ename ='SCOTT') and ename !='SCOTT';

11、列出每个部门的员工数,平均工资和平均服务期限

select

deptno ,count(*),round(avg(sal+nvl(comm ,0)))avgsal,roun d(avg(sysdate-hiredate))avgday from emp group by deptno;

12、列出所有员工的姓名,部门名称和工资

selecte.ename,d.dname,(sal+nvl(comm,0)) as sum from empe,dept d where e.deptno=d.deptno;

13、列出所有部门的详细信息和人数

select d.*,(select count(*)from emp where deptno =d.deptno)as sum from dept d;

14、列出每种工作的最低工资和员工姓名

select * from emp where sal in (select MIN(sal) from emp group by job);

15、列出每个部门的经理的最低工资

select MIN(sal) ,deptno from emp where job='MANAGER' group by deptno;

16、列出所有员工的年薪,从低到高排序

selectename,(sal+nvl(comm,0))*12 income from emp order by income;

17、给服务年限超过10年的员工加薪10%

updateemp set sal=sal+sal*0.1 where

(months_between(sysdate,hiredate)/12)>10;

相关文档
最新文档