(第六讲)第7章数据库查询综述.ppt

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(第六讲)第7章数据库查询综述

例7-35可以用自连接来实现,程序如下: USE 教学库 SELECT a.学号, a.姓名, a.专业 FROM 学生表 a, 学生表 b WHERE a. 专业=b. 专业 AND b. 姓名=刘玲玲 需要特别指出的是,子查询的SELECT语句不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。 【例7-36】在“教学库”中查询“C007”号课的考试成绩比“郑辉”高的学生的学号和姓名。 USE 教学库 SELECT 学生表.学号,姓名 FROM 学生表,选课表 WHERE 学生表.学号 = 选课表.学号 and 课程号=C007 and 成绩(SELECT 成绩 FROM 选课表 WHERE 课程号=C007 and 学号=(SELECT 学号 FROM 学生表 WHERE 姓名=郑辉)) 2. SOME、ANY、ALL和IN子查询 ALL和ANY操作符的常见用法是结合一个比较操作符对一个数据列子查询的结果进行测试。 它们测试比较值是否与子查询所返回的全部或一部分值匹配。比如说,如果比较值小于或等于子查询所返回的每一个值,= ALL将是true;只要比较值小于或等于子查询所返回的任何一个值,= ANY将是true。SOME是ANY的一个同义词。 【例7-37】查询“教学库”中网络专业年龄最大的学生的学号和姓名。 USE 教学库 SELECT 学号,姓名 FROM 学生表 WHERE 年龄= ALL (SELECT 年龄 FROM 学生表 WHERE 专业=网络) AND 专业=网络 【例7-38】查询“教学库”中与任何网络专业同龄的学生的信息。 USE 教学库 SELECT * FROM 学生表 WHERE 年龄= ANY (SELECT 年龄 FROM 学生表 WHERE 专业=网络) SELECT * FROM 学生表 WHERE 年龄 in (SELECT 年龄 FROM 学生表 WHERE 专业=网络) 实际上,IN和NOT IN操作符是= ANY和 ALL的简写。也就是说,IN操作符的含义是“等于子查询所返回的某个数据行”,NOT IN操作符的含义是“不等于子查询所返回的任何数据行”。 【例7-39】在“教学库”中查询选修了“C001”号课程的学生姓名和所在专业。 USE 教学库 SELECT 姓名,专业 FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号=C001) 7.2 分组和汇总 使用聚合函数返回的是所有行数据的统计结果。如果需要按某一列数据的值进行分类,在分类的基础上再进行查询,就要使用GROUP BY子句了。分组技术是指使用GROUP BY子句完成分组操作的技术。 GROUP BY子句的语法结构如下: [ GROUP BY [ ALL ] group_by_expression [,…n] [ WITH { CUBE | ROLLUP } ] ] 7.2.1 普通(简单)分组 如果在GROUP BY子句中没有使用CUBE或ROLLUP关键字,那么表示这种分组的技术是简单分组技术。 【例7-21】查询“教学库”中男生和女生的人数。 USE 教学库 SELECT 性别,count(性别) 人数 FROM 学生表 GROUP BY 性别 注意:指定 GROUP BY 子句时,选择列表中任意非聚合表达式内的所有列都应包含在 GROUP BY 列表中(不能使用别名列),或者 GROUP BY 表达式必须与选择列表表达式完全匹配。 当完成数据结果的查询和统计后,可以使用HAVING关键字来对查询和统计的结果进行进一步的筛选。 【例7-22】在“选课表”中查询选修了两门及以上课程的学生学号和选课数。 USE 教学库 SELECT 学号,COUNT(课程号) 选修课程数 FROM 选课表 GROUP BY 学号 HAVING COUNT(课程号)=2 HAVING与 WHERE 子句的区别是: WHERE 子句式对整表中数据筛选满足条件的行;而HAVING子句是对GROUP BY分组查询后产生的组加条件,筛选出满足条件的组。 另外,WHERE中条件不能使用聚合函数,HAVING中条件一般使用聚合函数。 7.2.2 CUBE和ROLLUP 的使用 1. CUBE 指定在结果集内不仅包含由 GROUP BY 提供的行,还包含汇总行。GROUP BY 汇总行针对每个可能的组和子组组合在结果集内返回。GROUP BY 汇总行在结果中显示为 NULL,但用来表示所有值。 结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档