• 欢迎来到论文发表网(www.lunwenchina.cn),我们为您提供专业的论文发表咨询和论文发表辅导!
受“清朗”行动影响,原网站QQ被封,新老作者请联系通过新的QQ:189308598。或者电话微信:15295038855

你的位置:论文发表网 >> 论文库 >> 文化论文 >> 详细内容 在线投稿

SQL Server 嵌套查询   

热度0票  浏览50次 时间:2022年4月12日 11:19
  南京信息职业技术学院 信息服务学院
       摘 要:嵌套查询就是用一个 Select 查询的结果作为查询的条件。嵌套查询可以将一系列简单查询构成复杂查询,增强查询能力。 子查询的嵌套层次最多可达到 255 层,以层层嵌套的方式构造查询充分体现了 SQL“结构化”的特点。 嵌套查询的结果可以是单行或者多行。返回单行的非相关子查询通常用在比较运算符之后;返回多行的非相关子查询通常用在比较运算符与 ANY、ALL 组成的运算符、IN 和 NOT IN 之后。
  关键词:嵌套查询;数据查询;查询
  引言
  非相关子查询,也称嵌套查询,可以多层嵌套。嵌套查询可以将一系列简单查询构成复杂查询,增强查询能力。 子查询的嵌套层次最多可达到 255 层,以层层嵌套的方式构造查询充分体现了 SQL“结构化”的特点。 嵌套查询在运行时由里向外处理,每个子查询先于上一级外查询执行,子查询的结果作为外查询的条件值,然后执行外查询。
  非相关子查询的结果可以是单行或者多行。返回单行的非相关子查询通常用在比较运算符之后;返回多行的非相关子查询通常用在比较运算符与 ANY、ALL 组成的运算符、IN和 NOT IN 之后。
  一、单行子查询
  当子查询的返回值只有一个时,可以把子查询看成一个常量,因此可以使用比较运算符将外查询和子查询连接起来。
  (1)比较子查询
  例1 查询与王明同一个部门的所有读者的读者编号和读者名。
  SELECT ReaderID,  ReaderName FROM ReaderDetailWHERE ReaderDep= (SELECT ReaderDep
  FROM ReaderDetail WHERE ReaderName=’王明’)说明:
  1)上述语句的执行过程是先执行子查询:
  SELECT ReaderDep FROM ReaderDetail WHERE
  ReaderName==’王明’
  子查询的查询结果为:计算机系(王明所在部门)。将计算机系作为外查询的查询条件,此时的外查询为:
  SELECT ReaderID,  ReaderName FROM ReaderDetailWHERE ReaderDep=’计算机系’
  2)使用比较运算符将外查询和子查询连接起来,必须保证子查询的返回值只有一个,否则会发生错误。
  (2)统计函数和子查询
  只要不使用 GROUP BY 子句,在 SELECT 子句中使用统计函数的子查询的返回结果肯定是一行。因此,可以使用比较运算符将外查询和这类子查询连接起来。
  二、多行子查询
  在多行子查询中,必须使用多行运算符来判断条件,而不能是用单行运算符。多行运算符可以执行与一个或多个数据的比较操作。
  (1)IN 的使用
  用 IN 连接外查询和子查询,子查询的返回结果可以包含零个或多个值,子查询的结果作为外查询的条件值,然后执行外查询。
  (2)NOT IN 的使用
  NOT IN 的使用和 IN 的使用基本一样。
  (3)ANY 和 ALL 的使用
  如果子查询返回多个值,即一个集合,可以在比较运算符之后加 ANY 或 ALL 关键字。使用格式为:
  〈列名〉〈比较运算符〉[ANY|ALL]〈子查询〉说明:
  1)ANY 的含义为:将一个列值与子查询返回结果集中的的每一个值进行比较。若在某次比较的结果为真,则整个子查询结果集的比较为真;只有每一次比较的结果为假,则整个子查询结果集的比较为假。
  2)ALL 的含义为:将一个列值与子查询返回结果集中的的每一个值比较。若每一次比较的结果均为真,则整个子查询结果集的比较为真;只要有一次比较的结果为假,则整个子查询结果集的比较为假。
  ANY 和 ALL 的使用与比较运算符组合使用的语义为:
  ● >ANY 大于子查询结果中的某个值
  ● > ALL 大于子查询结果中的所有值
  ● < ANY 小于子查询结果中的某个值
  ● < ALL 小于子查询结果中的所有值
  ● >= ANY 大于等于子查询结果中的某个值
  ● >= ALL 大于等于子查询结果中的所有值
  ● <= ANY 小于等于子查询结果中的某个值
  ● <= ALL 小于等于子查询结果中的所有值
  ● = ANY 等于子查询结果中的某个值
  ● = ALL 等于子查询结果中的所有值(没有实际意义)● != ANY 或 <> ANY 不等于子查询结果中的某个值● != ALL 或 <> ALL 不等于子查询结果中的任何一个值IN 和 = ANY 等价,!= ALL 或 <> ALL 和 NOT IN 等价。
  例2 查询其他出版社中比“机械工业出版社”任意一本书价格高的图书名、出版社和单价。
  方法一:
  SELECT BookName,PublishingCompany,Price FROMBookDetail
  WHERE PublishingCompany!= ' 机械工业出版社 '
  AND Price>ANY (SELECT Price FROM BookDetail WHEREPublishingCompany= ' 机械工业出版社 ')
  方法二:
  SELECT BookName,PublishingCompany,Price FROMBookDetail
  WHERE PublishingCompany!= ' 机械工业出版社 '
  AND Price>(SELECT MIN(Price) FROM BookDetailWHERE PublishingCompany= ' 机械工业出版社 ')>ANY 表示大于子查询结果中的最小值,所以可以在子查询的 SELECT 子句中使用 MIN 函数代替 ANY。
  三、结论
  嵌套查询,可以实现多层嵌套。嵌套查询可以将一系列简单查询构成复杂查询,增强查询能力。子查询的嵌套层次最多可达到 255 层,以层层嵌套的方式构造查询充分体现了SQL“结构化”的特点。 嵌套查询在运行时由里向外处理,每个子查询先于上一级外查询执行,子查询的结果作为外查询的条件值,然后执行外查询。
  参考文献:
  [1] 陈洛资,陈昭平. 数据库系统及应用基础(第2版). 北京:
  清华大学出版社 , 北京交通大学出版社,2005.
  [2] 李代平 . SQL server 2000 实用宝典.北京:地质出版社,2001.
  [3] 徐人风.SQL Server 2000 数据库及应用.北京:高等教育出版社,2004.
  [4] 李调阳.SQL Server 2000 中文版标准教程.北京:海洋出版社,2005.



中国论文网(www.lunwenchina.cn),是一个专门从事期刊推广、论文发表、论文写作指导的机构。本站提供一体化论文发表解决方案:省级论文/国家级论文/核心论文/CN论文。

投稿邮箱:lunwenchina@126.com

在线咨询:189308598(QQ) 

联系电话:15295038855(徐编辑)  

 

上一篇 下一篇
0

联系我们