今天周六人不多吧子查询分为相关子查询和独立子查询,相关,顾名思义,就是说它的查询结果与外界查询存在关联。 举个例子, 有表A(id number, name varchar2(20)),B(id number),现在要查询A表中id在B表存在的记录,多种写法,其中相关子查询可以写成这样: select * from A where exists (select * from B where b.id = a.id); 对于这个子查询来讲,如果没有a.id传入,那b也没法查。独立子查询则是结果不依赖外部查询,像这样: select * from A where exists (select * from B where b.id > 10); 只要b中有id > 10的记录,a的记录就可以查出来,不管a.id是什么值。不必死记概念,何况记了也没用,用多了自然就熟悉了
尝试回答一下:独立子查询: (见emp表) select empno,ename,sal,job from emp where sal < all(select avg(sal) from emp group by job)//不管外面的结果是什么,select avg(sal) from emp group by job得出的结果集应该是不变的吧相关子查询? 内部的子查询与外面的有关连的
子查询就是多个select语句组成的,比如下面这个,我要查寻工资最少的那一个人: select empno,ename,sal,job from emp where sal < (select min(sal) from emp )
简单的我大概可以理解的,但是复杂的就不行了。下面这个就看不明白: 显示每个部门的最高工资的雇员信息 select distinct deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal from emp a order by deptno; 这个怎么理解啊!!!
举个例子,
有表A(id number, name varchar2(20)),B(id number),现在要查询A表中id在B表存在的记录,多种写法,其中相关子查询可以写成这样:
select * from A where exists (select * from B where b.id = a.id);
对于这个子查询来讲,如果没有a.id传入,那b也没法查。独立子查询则是结果不依赖外部查询,像这样:
select * from A where exists (select * from B where b.id > 10);
只要b中有id > 10的记录,a的记录就可以查出来,不管a.id是什么值。不必死记概念,何况记了也没用,用多了自然就熟悉了
(见emp表)
select empno,ename,sal,job
from emp
where sal < all(select avg(sal) from emp group by job)//不管外面的结果是什么,select avg(sal) from emp group by job得出的结果集应该是不变的吧相关子查询?
内部的子查询与外面的有关连的
select empno,ename,sal,job
from emp
where sal < (select min(sal) from emp )
显示每个部门的最高工资的雇员信息
select distinct deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal
from emp a order by deptno;
这个怎么理解啊!!!