论文库
  • 首页
  • 论文发表
  • 论文宝库
  • 期刊大全
  • 新闻中心
  • 著作出书
  • 发表流程
  • 关于我们
  • 诚心通道
  • 联系我们
  • 当前位置:主页 ->论文库 ->文化论文
  • SQL Server 嵌套查询   

    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.

    #l$u2ZfE0
  • 上一篇             下一篇
发给朋友 分享到朋友圈
  • 回顶部
中国论文网|微信客服:15295038855
本站提供论文发表发表论文核心论文发表
免费论文发表资源,文章只代表作者观点,并不意味着本站认同,部分作品系转载,版权归原作者或相应的机构;若某篇作品侵犯您的权利,请来信告知:lunwenchina@126.com