SQL Server进阶(五)子查询

概述

嵌套查询

  一个select…From…Where查询语句块可以嵌套在另一个select…From…Where查询块的Where子句中,称为嵌套查询。 

  外层查询称为父查询,主查询。内层查询称为子查询,从查询。 

  子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。 

  关于子查询注意:

  子查询中不能有order by分组语句。(因为子查询只是个中间结果,分组等是作用于最后的结果拥有显示)

  子查询一定要用( )包围

非相关子查询

简单嵌套查询

查询选修课程号为’101’并且成绩高于学生号为’9501101’的所有学生的成绩.

select * from sclass 
where cno='101' and degree>=(select degree from sclass where sno='9501101'and cno='101')

带[not] in的嵌套查询

select sales_id,tot_amt
from sales 
where sale _id  in(select sale_id from employee where sex='F')

相关子查询

带exists的嵌套查询

以下范例让你找出滞销的产品,也就是尚未有任何销售记录的库存产品。此范例主要是查询以库文件中的每一条产品代码到销售明细表中去查询,如果查询不到任何一条,表示该产品未曾卖出任何一件。

select * from stock a
where not exists(select * from sale_item b where a.prod_id=b.prod_id and a.stup_id=b.stup_id)

非相关子查询和相关子查询区别

  1. 非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
  2. 相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)

  相关子查询:子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次.比如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名=内表.姓名),你看在括号里的sql语句,是与外表关联的.

  非相关子查询,还是以上面为例,如:select * from 外表 where 姓名 in (select 姓名 from 内表 where 外表.姓名='张铁牛'),你看这个语句中括号里的sql语句,它是单独执行的,与外表没有任何关联,它只执行一次,执行完后将结果集传递给外部查询使用.

扫描二维码关注公众号,回复: 3084600 查看本文章

https://blog.csdn.net/qq_26937525/article/details/53930498

http://www.cnblogs.com/jackson0714/p/TSQLFundamentals_03.html

https://blog.csdn.net/mascf/article/details/50288199

猜你喜欢

转载自www.cnblogs.com/cnki/p/9541706.html