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;
    第二步:找到姓名,但是以上的子查询,不能再出现其他的字段
    2020.4.26 - 图1
    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’;
    2020.4.26 - 图2
    第三步:加入部门的名称信息
    2020.4.26 - 图3
    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;
    2020.4.26 - 图4
    第四步:统计部门人数
    2020.4.26 - 图5
    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;
    2020.4.26 - 图6
    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操作的总结,这些题目结果都不重要,关键是解决问题的思路,这些只能通过代码的不断练习。