网站大量收购独家精品文档,联系QQ:2885784924

第3章查询操作重点.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图 3-3-3 子查询效果 图 3-3-4 带有 NOT IN 的子查询效果 2.带有 ANY 或 ALL 的子查询 与使用 IN 关键字引入的子查询一样,由比较运算符与一些关键字引入的子查询返回一个值列表。 (1)比较运算符的子查询的基本语法格式 使用比较运算符的子查询的基本语法格式如下: SELECT 字段列表 FROM 表名 WHERE 表达式 operator [ANY∣ALL∣SOME] 子查询语句 operator 表示比较运算符,带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。ANY、 ALL 和 SOME 是 SQL 支持的在子查询中进行比较的关键字。ANY 和 SOME 表示如果返回值中至少有一个值的比较为 真,那么就满足搜索的条件。如果子查询没有返回值,那么就不满足搜索条件。ALL 表示无论子查询返回的每个 值的比较是否是真或有无返回值,都满足搜索条件。当用户能确切知道内层查询返回的是单值时,可以用、、 =、=、=、!=或等比较运算符。单值情况下使用=,多值情况下使用 IN 或 NOT IN 谓词。 (2)ANY 和 ALL 运算符的含义 子查询返回单值时可以用比较运算符,而使用 ANY 或 ALL 谓词时则必须同时使用比较运算符,其含义如表 3-3-1 所示。 (3)ANY 的表达式书写方式 (4)ALL 的表达式书写方式 l l l (5)=ANY 的表达式书写方式 3.带有 EXISTS 的子查询 (1)EXISTS 关键字的含义 在 SQL 中,关键字 EXISTS 代表“存在”的含义,它只查找满足条件的那些记录,一旦找到第一个匹配的记 录后,则马上停止查找。带 EXISTS 的子查询不返回任何记录,只产生逻辑值“真”(TRUE)或者逻辑值“假”(FALSE), 它的作用是在 WHERE 子句中测试子查询返回的行是否存在。如果存在则返回真值,如果不存在则返回假值。即表 明找到或者没有找到的含义。 (2)EXISTS 和 NOT EXISTS 的使用 (3)内连接和 EXISTS 的使用 (4)EXISTS 语法说明 使用 EXISTS 后,若内层查询结果非空,则外层的 WHERE 子句返回真值 TRUE,否则返回假值 FALSE。 EXISTS 作用的不是列之间的关系,而是表之间的关系。采用的既不是等号,也不是 IN,所以在 SELECT 列 表中不需要制定字段名,通常用 SELECT *来代替。 EXISTS 通常使用一个所谓的关联子查询,该子查询并不在它自己的查询中运行。为了实现关联子查询,SQL 服 务器必须对外查询的每一条记录都执行一次此子查询来测试是否匹配。 (5)相关子查询的处理过程 当子查询的查询条件依赖于外层父查询的某个属性值,我们称这类查询为相关子查询。求解相关子查询不能 像求解不相关子查询那样,一次将子查询求解出来,然后求解父查询。相关子查询的内层查询由于与外层查询有 关,因此必须反复求值。 相关子查询的一般处理过程如下: ① 首先取外层查询中“学生基本档案”表的第一条记录,根据它与内层查询相关的属性值(即“学号”值) 处理内层查询,若 WHERE 子句返回值为真(即内层查询结果非空),则取此记录,放入结果表。 ② 再检查“学生基本档案”表的下一条记录。 ③ 重复执行步骤②,直至“学生基本档案”表全部检查完毕。 在案例 10-9 中,若内层查询结果不为空,则外层的 WHERE 子句返回真值,则取此记录放入结果表中。取出 外层查询中(“学生基本档案”表)的第 1 条记录,根据它与内层查询相关的字段值(学号值)处理内层查询, 然后再取(“学生基本档案”表)下一条记录;重复这一过程,直至外层(“学生基本档案”表)全部检查完为止。 4.限制子查询的条件 子查询也是使用 SELECT 语句组成,所以在使用 SELECT 语句应注意的问题也同样适用于子查询,同时子查询 还要受下面条件的限制。 ① 通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称。 ② 如果外部查询的 WHERE 语句包括某个列名,则该子句必须与子查询选择列表中的该列兼容。 ③ 子查询的选择列表中不允许出现 ntext、text 和 image 数据类型。 ④ 无修改的比较运算符引入的子查询不能包括 GROUP BY 和 HAVING 子句。 ⑤ 包括 GROUP BY 的子查询不能使用 DISTINCT 关键字。 ⑥ 不能指定 COMPUTE 和 INTO 子句。 ⑦ 只有同时指定了 TOP,才可以指定 ORDER BY。 ⑧ 由子查询创建的视图不能更新。 ⑨ 通过 EXISTS 引入的子查询的选择列表由星号(*)组成,而不使用

您可能关注的文档

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档