SELECT a.ename, a.sal, a.deptno, b.salavg
FROM emp a,
(SELECT deptno, AVG(sal) salavg FROM emp GROUP BY deptno) b
WHERE a.deptno = b.deptno AND a.sal > b.salavg;
这个查询使用了一个子查询在FROM
子句中。以下是查询的执行步骤:
- 执行内部子查询:
SELECT deptno, AVG(sal) salavg FROM emp GROUP BY deptno
。这个子查询计算每个部门的平均工资,返回两列(deptno和salavg)。 - 执行外部查询:
SELECT a.ename, a.sal, a.deptno, b.salavg FROM emp a, (SELECT deptno, AVG(sal) salavg FROM emp GROUP BY deptno) b WHERE a.deptno = b.deptno AND a.sal > b.salavg
。 - 在外部查询中,将
emp
表与内部子查询的结果b
进行连接。连接条件是a.deptno = b.deptno
,即只选择部门号相同的行。 - 对于每一行记录,在连接的结果中计算
a.sal > b.salavg
条件,只返回满足条件的行。 - 返回最终结果,包括
a.ename, a.sal, a.deptno, b.salavg
列。
这个查询的目的是找到工资高于所在部门平均工资的雇员信息。通过使用子查询,可以动态计算每个部门的平均工资,并与雇员的工资进行比较,从而得到符合条件的结果