3、 列出薪金比“SMITH”或“ALLEN”多的所有员工的编号、姓名、部门名称,其领导姓名,部门人数,平均工资、最高及最低工资。
◆ 确定要使用的数据表:
● emp表:员工的编号、姓名。
● dept表:部门名称。
● emp表:领导信息。
● emp表:统计部门数据。
◆ 确定已知的关联字段:
● 雇员和部门:emp.deptno = dept.deptno
● 雇员和领导:emp.mgr = memp.empno
第一步:找到“SMITH”和“ALLEN”的薪金
SELECT sal FROM emp WHERE ename IN('SMITH', 'ALLEN') ;
第二步:以上的查询返回多行单列数据,应该在WHERE子句之中使用它
SELECT e.empno, e.ename, e.sal
FROM emp e
WHERE sal>ANY(
SELECT sal FROM emp WHERE ename IN('SMITH', 'ALLEN') )
AND e.ename NOT IN('SMITH', 'ALLEN') ;
第三步:找到部门名称、领导姓名
SELECT e.empno, e.ename, e.sal, d.dname, m.ename
FROM emp e, dept d, emp m
WHERE e.sal>ANY(
SELECT sal FROM emp WHERE ename IN('SMITH', 'ALLEN') )
AND e.ename NOT IN('SMITH', 'ALLEN')
AND e.deptno=d.deptno
AND e.mgr=m.empno(+) ;
第四步:统计部门的信息,在FROM子句之中完成
SELECT e.empno, e.ename, e.sal, d.dname, m.ename, temp.count, temp.avg, temp.max, temp.min
FROM emp e, dept d, emp m, (
SELECT deptno dno, COUNT(empno) count, AVG(sal) avg, MAX(sal) max, MIN(sal) min
FROM emp
GROUP BY deptno ) temp
WHERE e.sal>ANY(
SELECT sal FROM emp WHERE ename IN('SMITH', 'ALLEN') )
AND e.ename NOT IN('SMITH', 'ALLEN')
AND e .deptno=d.deptno
AND e.mgr=m.empno(+)
AND temp.dno=d.deptno ;
网友评论