相关子查询

SQLServer子查询以分为相关子查询嵌套子查询

类别编号   图书名   出版社       价格

2           C#        盛通出版     23.00

2          jsp开发   机械出版社   45.00

3         高等数学   济南出版社  25.00

3         疯狂英语   清华出版社   32.00

1)嵌套子查询的执行不依赖与外部的查询。

2)执行外部查询,并显示结果

--查询所有价格高于平均价格的图书名,作者,出版社价格

--例1

Use tempdb

go

select 书名,作者,出版社,价格

from Books

where 价格

select avg(价格)

from Books

go

相关子查询的执行依赖于外部查询,多情况下是子查询的WHERE子句中引用外部查询的表

--例2

1)从外层查询中取出一个元组,将元组相关的列值传给内层查询。

2)执行内层查询,得到子查询的值。

select 书名,作者,出版社,价格

FROM BOOK As a

where 价格 >

select avg(价格)

from Books as b

where a.类编号=b.类编号

go

--可以看出,相关查询无法独立于外部查询,该查询需要一个编号的值而这个值是个变量,随SQLSever检索Books表中的不同行而改变。

先将Books表中的第一条记录的”编号“的值“2”带入子查询中子查询变为:

         select avg(价格)

            from Books as b

          where b.类编号=2

子查询的结果为该类图书的平均价格,所以外部查询变为:

      select 书名,作者,出版社,价格

       from  Books as b

       where 价格  >34

如果where条件为True,则第一条结果包括在结果集中,否则不包括。

总结:

1)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

2)非相关子查询是独立于外部查询的子查询,子查询总共执行一次执行完毕后将值传递给外不查询。

 

posted @ 2016-08-09 12:22  时间&煮雨  阅读(671)  评论(0编辑  收藏  举报