15、列出所有部门的详细信息和部门人数。
1、确定所需要的数据表:
- emp表:统计信息;
- dept表:查询部门信息;
2、确定已知的关联字段:emp.deptno=dept.deptno;
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno)
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname,d.loc;
16、列出各种工作的最低工资及从事此工作的雇员姓名。
1、确定所需要的数据表:
- emp表:统计出各个工作的最低工资;
- emp表:查找出雇员姓名;
第一步:按照职位统计各个职位的最低工资
SELECT job,MIN(sal) FROM emp
GROUP BY job;
第二步:将以上的查询和emp表关联
SELECT e.ename,e.job,e.sal
FROM emp e,(
SELECT job,MIN(sal) FROM emp
GROUP BY job) temp
WHERE e.job=temp.job AND e.sal=temp.min;
17、列出各个部门的MANAGER(经理)的最低薪金、姓名、部门名称、部门人数。
1、确定所需要的数据表:
- emp表:找到经理的薪金、姓名;
- dept表:部门名称;
- emp表:统计部门人数;
2、确定已知的关联字段:emp.deptno=dept.deptno;
第一步:找到所有部门的经理
SELECT deptno,MIN(sal)
FROM emp
WHERE job=’MANAGER’
GROUP BY deptno;
第二步:找到姓名,但是以上的子查询,不能再出现其他的字段
SELECT e.ename,e.sal
FROM emp e,(
SELECT deptno dno,MIN(sal) sal
FROM emp
WHERE job=’MANAGER’
GROUP BY deptno) temp
WHERE e.deptno=temp.dno AND e.sal=temp.sal AND e.job=’MANAGER’;
第三步:加入部门的名称信息
SELECT e.ename,e.sal,d.dname
FROM emp e,(
SELECT deptno dno,MIN(sal) sal
FROM emp
WHERE job=’MANAGER’
GROUP BY deptno) temp,dept d
WHERE e.deptno=temp.dno AND e.sal=temp.sal AND e.job=’MANAGER’
AND e.deptno=d.deptno;
第四步:统计部门人数
SELECT e.ename,e.sal,d.dname,res.count
FROM emp e,(
SELECT deptno dno,MIN(sal) sal
FROM emp
WHERE job=’MANAGER’
GROUP BY deptno) temp,dept d,(
SELECT deptno dno,COUNT(empno) count
FROM emp
GROUP BY deptno) res
WHERE e.deptno=temp.dno AND e.sal=temp.sal AND e.job=’MANAGER’
AND e.deptno=d.deptno AND res.dno=d.deptno;
18、列出所有员工的年工资,所在部门名称,按年薪从低到高排序。
1、确定所需要的数据表:
- emp表:统计年工资;
- dept表:部门名称;
2、确定已知的关联字段:emp.deptno=dept.deptno;
SELECT e.ename,e.sal*12 income,d.dname
FROM emp e,dept d
WHERE e.deptno=d.deptno
ORDER BY income;
19、查出某个员工的上级主管及所在部门名称,并要求出这些主管中的薪水超过3000。
1、确定所需要的数据表:
- emp表:员工的信息;
- emp表:领导的信息;
- dept表:部门名称;
2、确定已知的关联字段:
- 雇员和部门:emp.deptno=dept.deptno;
- 雇员和领导:emp.mgr=memp.empno;
SELECT DISTINCT m.ename,d.dname,m.sal
FROM emp e,emp m,dept d
WHERE e.mgr=m.empno AND m.deptno=d.deptno AND m.sal>3000;
20、求出部门名称中,带‘S’字符的部门员工的工资合计、部门人数。
1、确定所需要的数据表:
- emp表:进行统计信息;
- dept表:部门名称;
2、确定已知的关联字段:emp.deptno=dept.deptno;
SELECT d.dname,SUM(e.sal),COUNT(e.empno)
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno AND d.dname LIKE ‘%S%’
GROUP BY d.dname;
21、给任职日期超过30年或者在87年雇佣的雇员加薪,加薪原则:10部门增长10%,20部门增长20%,30部门增长30%,依次类推。
UPDATE emp SET
sal=(1 + deptno/100)sal
WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>30
OR TO_CHAR(hiredate,’yyyy’)=*1987;
以上的所有题目作为DML操作的总结,这些题目结果都不重要,关键是解决问题的思路,这些只能通过代码的不断练习。