1)select empno,ename,sal, (select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno=e.deptno)
2)select empno,ename,sal, (select avg(sal) from emp where deptno=emp.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno=emp.deptno)
from emp e
where sal > (select avg(sal) from emp where deptno=emp.deptno)
因为 e 表是from emp e 这个表 emp.deptno select avg(sal) from emp 是指这个表
主查询和子查询用的同一张表,子查询语句条件中的deptno=emp.deptno 相当于笛卡尔积了。如果子查询和主查寻每张表都有别名,就不存在这种问题了。
就近原则,如果子查询内有符合 ‘emp’ 的 表/集合,就采用子查询内的,所以第二条语句的emp.deptno用的是子查询内的而不是子查询外的。