相关子查询和不相关子查询

相关子查询:

比如

select t.id,t.name,t.pass from student t where 80<=(select f.score from f
 where f.id=t.id and f.name='xxx') 

这就是1个相关子查询,可以理解为2层循环,要想执行内层的查询,需要先从外层查询到1个值出来。

执行的顺序是,父查询1个值,子查询对这个得到的值进行1轮查询,总查询次数是m*n

因为子查询需要父查询的结果才能执行,所以叫相关子查询

不相关子查询:

比如:

select t.id,t.name,t.pass from t where t.id in (select f.id from  f where f.score=70) 

这就是1个不相关子查询,子查询的不需要父查询把结果传进来,所以叫不相关子查询

执行顺序是子查询先执行,得到结果后传给父查询,父查询就不用每次查询完1个值后再执行1轮子查询

由于2个查询是分开的,无关联的,所以叫不相关子查询,查询次数是m+n

猜你喜欢

转载自blog.csdn.net/wzngzaixiaomantou/article/details/81807399