SQL查询语句3

SQL查询语句3_第1张图片

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') ;

SQL查询语句3_第2张图片

第二步:以上的查询返回多行单列数据,应该在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') ;

SQL查询语句3_第3张图片

第三步:找到部门名称、领导姓名

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(+) ;

SQL查询语句3_第4张图片

第四步:统计部门的信息,在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 ;

SQL查询语句3_第5张图片

你可能感兴趣的:(SQL查询语句3)