新手问题:比如一个非常简单的子查询: select * from emp where deptno in(select deptno from emp where sal >300);
 我想问在执行查询的时候,是先把子查询全部查询完获得一个临时表后在进行外部查询,还是在子查询中查询一条就返回到外部查询中进行外部查询?然后就是一条一条的返回?内部查询是一跳一条返回还是等内部查询完整个表后再返回?

解决方案 »

  1.   

    看执行计划
    或者执行以下语句,选择最下边返回项就看见了。
    set statistics xml onselect * from emp where deptno in(select deptno from emp where sal >300); 
      

  2.   

    StmtText
    -------------------------------------------------------------------------------------------------------
      |--Nested Loops(Left Semi Join, WHERE:([master].[dbo].[emp].[deptno]=[master].[dbo].[emp].[deptno]))
           |--Table Scan(OBJECT:([master].[dbo].[emp]))
           |--Table Scan(OBJECT:([master].[dbo].[emp]), WHERE:([master].[dbo].[emp].[sal]>(300)))(3 行受影响)