标签:
相关子查询的执行以来于外部查询,多数情况下是子查询的where子句中引用了外部查询的表.
相关子查询的执行过程:
1.从外层查询中取出一个元组,将元组相关列的值传给内层查询
2.执行内层查询,得到子查询操作的值.
3.外查询根据子查询返回的结果或结果集得到满足条件的行.
4.然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕.
下面举例说明:
--查询book表中大于该类图书价格平均值的图书信息
book表:
id name price
2 C# 23.00
2 java 45.00
3 高等数学 25.00
3 疯狂英语 32.00
实现代码:
select *from book as b where price > (select avg(price) from book as c where b.id=c.id)
与前面介绍过得子查询不同,相关子查询无法独立于外部查询而得到解决,该子查询需要一个"类编号",的值.而这个值是个变量,随SQL Server检索book表中的不同行而改变.下面详细说明该查询执行过程:
先将book表中的第一条记录"类编号"的值"2"代入子查询中,子查询变为:
select AVG(price)
from Book AS c
where c.id=2
子查询的结果为该类图书的平均价格,所以外部查询变为:
select *
from Book as b
where price > 34
如果where条件为true,则第一条结果包括在结果集中,否则不包括,对book表中的所有行运行相同的过程,最后形成的结果集及最后返回结果.
标签:
原文地址:http://www.cnblogs.com/an-z/p/5765363.html