oracle数据库的部门员工工资数量计算方法

–工资 = 薪金 + 佣金
–1. 列出在每个部门工作的员工数量、平均工资和平均服务期限。

select deptno,count(*) 员工数量,avg(sal+nvl(comm,0)) 平均工资,to_char(to_date(‘0001-01-01′,’yyyy-mm-dd’) + avg(sysdate-hiredate)-366-31,’yy”年”mm”月”dd’) avgday from emp group by deptno;

–注意啊!日期加天数就是日期
–2. 列出所有员工的姓名、部门名称和工资。

select e.ename 姓名, d.dname 部门名称,e.sal + nvl(e.comm,0) from emp e,dept d where e.deptno = d.deptno ;

–3. 列出从事同一种工作但属于不同部门的员工的一种组合。

select e1.ename 员工1,e2.ename 员工2 from emp e1,emp e2 where e1.job = e2.job and e1.deptno<> e2.deptno and e1.empno <> e2.empno ;

–4. 列出所有部门的详细信息和部门人数。 [*]

select * from dept d left join (select count(*) from emp group by deptno) e on ;
select * from dept a left join (select deptno,count(*) from emp group by deptno) b on a.deptno=b.deptno ;

–5. 列出各种工作的最低工资。

select job,min(sal+nvl(comm,0)) from emp group by job;

–6. 列出各个部门的MANAGER(经理)的最低薪金。

select min(sal) from emp e where e.job = ‘MANAGER’;

7. 列出所有员工的年工资,按年薪从低到高排序。

select ename 姓名 ,(sal+nvl(comm,0))*12 year_sal from emp order by year_sal ;

8. 找出月薪相同的员工

select e1.ename,e2.ename from emp e1,emp e2
where e1.sal = e2.sal and e1.empno<>e2.empno;

–9. 列出至少有一个员工的所有部门。

select d.* from dept d,
(select deptno no ,count(deptno) c from emp group by deptno)m
where d.deptno = m.no and m.c>=1;

–10. 列出薪金比“SMITH”多的所有员工。

select * from emp d where d.sal>
(select sal from emp e where e.ename = ‘SMITH’);

–11. 列出所有员工的姓名及其直接上级的姓名。

select e1.ename 员工名, e2.ename 上级名 from emp e1,emp e2 where e1.mgr = e2.empno;

–12. 列出受雇日期早于其直接上级的所有员工。

select e1.* from emp e1,emp e2 where e1.mgr = e2.empno and e1.hiredate <e2.hiredate;

–13. 列出所有“CLERK”(办事员)的姓名及其部门名称。

select e.ename 员工姓名,d.dname 部门名称 from emp e,dept d where e.deptno = d.deptno and e.job = ‘CLERK’;

–14. 列出最低薪金大于1500的各种工作。

select job,min(sal)from emp group by job having min(sal)>1500;

–15.列出在部门“SALES”(销售部)工作的员工的姓名, 假定不知道销售部的部门编号。

select e.ename from emp e,dept d where e.deptno = d.deptno and d.dname = ‘SALES’;

–16. 列出薪金高于公司平均薪金的所有员工。

select * from emp e where e.sal >
(select avg(sal) from emp);

–17. 列出与“SCOTT”从事相同工作的所有员工。

select * from emp e where e.job =
(select job from emp where ename = ‘SCOTT’);

–18. 列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

select ename ,sal,deptno from emp where sal in(select sal from emp where deptno = 30) ;

–19. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

select ename,sal from emp where sal>all(select sal from emp where deptno = 30);

–20. 列出比“SCOTT”大两个月以上的员工姓名

select ename from emp e
where months_between(e.hiredate,(select hiredate from emp where ename = ‘SCOTT’))>2;

wkj9pvrhtaaamzihaaf0hhesne643

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部