码迷,mamicode.com
首页 > 其他好文 > 详细

相关子查询

时间:2016-08-12 16:37:05      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

相关子查询的执行以来于外部查询,多数情况下是子查询的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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!