- 1、本文档共93页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]关系数据库基础 第3章 第2部分 数据查询
无关子查询 子查询在外围查询之前进行,然后返回结果集供外围查询使用。对应于SQL语句来说,如果被嵌套的查询中不包含对于外围查询的引用,则成为无关子查询。最常用的无关子查询方式是IN或NOT IN子句,其语法格式如下: SELECT select_list FROM table_name WHERE condition [NOT] IN (SELECT select_list FROM table_name WHERE condition) * * 子查询返回值类型为单值单列 * * 该子查询的执行过程:首先对子查询求值(仅一次),求出OrderID为‘10249’的CustomerID为‘TOMSP’,然后以CustomerID= ‘TOMSP’为条件做外部查询,外部查询依赖于子查询的结果。 子查询返回值类型为单列多值 如果子查询中返回的是单列多值,则必须在子查询前使用关键字ALL或ANY,否则系统会提示错误信息 * * 子查询返回值类型为单列多值 * * 查询过程分2步:首先内部子查询返回订单ID为‘10248’的所订购的产品ID,然后这些值被带入外部查询中,在Products中查找与上述标识号相匹配的产品信息。 子查询返回值类型为单列多值 当子查询的结果是单列多值时,除了使用关键字ALL或ANY之外,还经常使用关键字IN或NOT IN。IN表示属于关系,即是否在子查询的结果集中。NOT IN则表示不属于集合或不是集合的成员 * * 子查询返回值类型为单列多值 * * 子查询返回值类型为单列多值 * * 相关子查询 相关子查询是指在执行子查询时需要使用的到外围查询的数据。 这时,外围查询首先选择数据提供给子查询,然后子查询再对数据进行比较,执行结束后再将它的查询结果返回给外围查询中。 相关子查询使用的关键字包括:EXISTS,AND,SOME,ANY、ALL等 * * 相关子查询 * * 找不到大于最大值的记录 找到大于最小值的记录72条 相关子查询 * * 相关子查询 * * 相关子查询 带关键字[ NOT ] EXISTS的子查询: 在WHERE子句中使用EXISTS关键字,表示判断子查询的结果集是否为空,如果子查询至少返回一行时,WHERE子句的条件为真,返回TRUE;否则条件为假,返回FALSE 加上关键字NOT,则刚好相反 EXISTS在相关子查询中使用时,对外表中的每一行子查询都要运行一遍,该行的值也要在子查询的WHERE子句中被使用,这样,通过EXISTS子句就能将外层表中的各行数据依次与子查询处理的内层表中的数据进行存在性比较,得到所需要的结果。 * * 相关子查询 * * 使用EXISTS引入的子查询需注意: EXISTS关键字前面没有列名、常量或其他表达式。 由EXISTS引入的子查询的选择列表通常几乎都是由(*)组成,这是因为,只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。 3.3.7 数据汇总 使用聚合函数:可以返回一列、几列或全部列的汇总数据值。这类函数仅用于数值型列,使用聚合函数时,不考虑NULL值 常用聚合函数表: * * 使用聚合函数 * * 使用聚合函数 * * 使用分组汇总子句 当需要显示分组的汇总数据时,就应使用GROUP BY子句。该子句的功能是根据指定的列将表中数据分成多个组后进行汇总 其语法格式为: * * SELECT column_name1[,…n] FROM table_name WHERE search_condition GROUP BY [ ALL ]colum_name1[,…n] [ HAVING search_condition ] 使用分组汇总子句 * * 注意: 使用GROUP BY子句为每一个组产生一个汇总结果,每个组只返回一行,不返回详细信息。 SELECT子句中指定的列必须是GROUP BY子句中指定的列,或者是和聚合函数一起使用。 如果包含WHERE子句,则只对满足WHERE条件的行进行分组汇总。 如果GROUP BY子句使用关键字ALL,则WHERE子句将不起作用。 HAVING子句可进一步排除不满足条件的组 使用分组汇总子句 * * 注意: 当同时存在GROUP BY子句、HAVING子句和WHERE子句时,其执行顺序为:先WHERE子句,后GROUP BY子句,再HAVING子句。即先用WHERE子句过滤不符合条件的数据记录,接着用GROUP BY子句对余下的数据记录按指定列分组、汇总,最后再用HAVING子句排除不符合条件的组。 使用分组汇总子句 * * 如果GROUP BY子句中指定了多个列,则表示要基于这些列的唯一组合来进行分组。在分组过程中,首先按第一列进行分组并按升序排列,然后再按第二列进行
文档评论(0)