请教大家,关于两条sql语句的理解
表是oracle自己的表
句1:
select * from emp e where e.sal=(select max(sal) from emp where deptno=e.deptno);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
我想问的是,为什么会是这个结果呢。
按我的理解是:在子查询中那种双表查询,select max(sal) from emp where deptno=e.deptno,这一句,应该相当于select max(a.sal) from emp a,emp b where a.deptno=b.deptno;这里应该是一个值啊。就是5000。
请教能分析一下。
句2
select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
这句,也没有看明白,为什么会这样。
当子查询做为条件的时候,应该怎么理解呢
------解决方案--------------------select * from emp e where e.sal=(select max(sal) from emp where deptno=e.deptno);
--
首先理解查询的含义,这个查询是扫描表EMP中的每一行,然后判断SAL是否=子查询中的值(max(sal))。把符合条件的记录取出来就是查询结果了。而
select max(a.sal) from emp a,emp b where a.deptno=b.deptno
--
这个查询的含义是扫描表EMP a 和 表EMP b中的每一行,首先把符合WHERE条件的行查找出来,然后再在这些行里面找出SAL最大的记录。
--
下面那个查询同理分析,你尝试下自己分析看看
------解决方案--------------------1.按我的理解是:在子查询中那种双表查询,select