第06章 分组查询和多表查询-MySQL.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第06章 分组查询和多表查询-MySQL.pptx》由会员分享,可在线阅读,更多相关《第06章 分组查询和多表查询-MySQL.pptx(180页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第06章 分组查询和多表查询-MySQLMySQL数据库设计与应用主讲:张成叔微信(QQ):7153265 微信公众号:张成叔第 6 章 分组查询和多表查询工作情境和任务n在数据库SchoolDB中uStudent表中就存放了学号、姓名等信息uSubject表中存储课程编号和课程名称信息uResult表中存储的是学号、课程编号和考试成绩等信息u在实际应用中u某些应用既需要显示学号、姓名,还得显示课程名称和考试成绩u需要将“学生信息”表、“课程”表和“成绩”表联合起来进行查询工作情境和任务n实现分组查询n通过多表连接获得学生成绩单n通过子查询实现多表查询知识和技能目标n理解和掌握分组
2、查询和连接查询的机制n使用GROUP BY和HAVING子句实现分组和筛选查询n掌握多表连接查询及应用n掌握子查询及应用本章重点和难点n外连接和内连接的区别及应用场景n灵活使用多表连接查询或者子查询解决实际问题知识技能结构图第1章 创建和管理数据库分组查询2 2多表查询1 13 3子查询目 录内容结构图n在实际的信息处理中,经常需要进行分类统计u例如:统计每个人的平均成绩u首先需要对成绩表的记录按照学号来分组u再对每组计算平均成绩n分类统计在实际应用场合比较多u例如,网上书店销售系统,需要分类统计不同种类图书的总数、平均价格u首先按照图书种类进行分类,然后在每组的基础上分别进行汇总和统计u分组
3、后的统计计算要利用聚合函数COUNT()、AVG()等分类统计n使用该子句实现分组n只有一列表示单列分组查询n如果分多列进行分组查询,需要列出具体的列名,以分号分隔分析分析分组查询 语法语法n单列分组查询u成绩表中存储了学生参加考试的成绩u需要统计不同科目的平均成绩u首先需要对成绩表中的记录按照科目来分组u再针对每个组进行平均成绩计算u使用聚合函数AVG()使用GROUP BY进行分组查询【演示示例6-1】统计每门课的平均分【演示示例6-1】 统计每门课程的平均分n数据库SchoolDB的成绩表Result中u统计每门课程的平均分【演示示例6-1】统计每门课的平均分需求需求n成绩记录了多门课程
4、的学生成绩,统计不同科目的平均成绩n把相同的subjectId都分为一组,这样就将数据分成了多组n针对每一组使用聚合函数取平均分分析分析【演示示例6-1】统计每门课的平均分分析代码分析代码【演示示例6-1】统计每门课的平均分分析结果分析结果操作操作演示演示:统计每门课的平均分:统计每门课的平均分n能否输出显示学号信息u不可以u学生的学号与课程不是一对一的关系u因为科目已经被“分组”了,分组后的数量减少为8组u每组中有多位学生,即多个学号【演示示例6-1】统计每门课的平均分拓展拓展【演示示例6-1】统计每门课的平均分拓展拓展一起努力 共同提高【演示示例6-2】统计每位学生的平均分【演示示例6-2
5、】 统计每位学生的平均分n数据库SchoolDB的成绩表Result中u统计每位学生的平均分u按照平均分由高到低的顺序排列显示【演示示例6-2】统计每位学生的平均分需求需求n求每位同学的平均分u需要前按照学号分组,再使用聚会函数AVG()n对显示结果排序u排序的依据是平均分,即利用聚合函数AVG()作为排序的依据分析分析【演示示例6-2】统计每位学生的平均分分析代码分析代码【演示示例6-2】统计每位学生的平均分分析结果分析结果操作操作演示演示:统计:统计每位学生每位学生的平均分的平均分一起努力 共同提高n多列分组查询u在实际应用中,分组查询时还可以按照多个列来进行分组u比如:按照年级统计男女生
6、的人数u先按照年级分组,再按照性别分组进行统计u使用COUNT()函数使用GROUP BY进行分组查询【演示示例6-3】统计每个年级的男女生人数【演示示例6-3】 统计每个年级的男女生人数n数据库SchoolDB的成绩表Result中u统计每个年级的男女生人数u按照年级编号显示【演示示例6-3】统计每个年级的男女生人数需求需求n需要使用多列分组查询uGROUP BY后面需要2列,年级编号和性别u年级编号在前面,使用逗号分隔n排序使用ORDER BY子句u写在GROUP BY子句的后面,排序依据为年级编号分析分析【演示示例6-3】统计每个年级的男女生人数分析代码分析代码【演示示例6-3】统计每个
7、年级的男女生人数分析结果分析结果操作操作演示演示:统计每个年级男女生人数:统计每个年级男女生人数一起努力 共同提高【技能训练6-1】分组查询应用【技能训练6-1】 分组查询应用n使用GROUP BY进行分组查询n灵活应用GROUP BY和ORDER BY等子句解决实际问题技能目标技能目标需求分析需求分析n查询每个年级的总学时数,并按照总学时降序排列【技能训练6-1】分组查询应用需求分析需求分析n查询参加每门课考试的人数,并按照考试人数降序排列【技能训练6-1】分组查询应用需求分析需求分析n查询每个年级的总人数n查询每个学生参加的所有考试的总分,并按照总分降序排列【技能训练6-1】分组查询应用需
8、求分析需求分析n查询每门课的最高分和最低分,并按照课程编号升序排列【技能训练6-1】分组查询应用需求分析需求分析n查询每位同学考试的最高分和最低分,并按照最高分降序排列【技能训练6-1】分组查询应用一起努力 共同提高n在实际应用中,有的需求还需要在分组统计的基础上进行筛选u对分组统计的结果进行过滤u比如:统计总分达到200分的学生信息nHAVING子句u实现分组后的筛选功能uHAVING子句要用在GROUP BY子句后,用于过滤分组后的结果n与WHERE子句比较uWHERE子句是用来在FROM子句中选择行uHAVING子句是在GROUP BY子句后选择行使用HAVING子句进行分组筛选nHAV
9、ING和WHERE子句可以一起使用n使用顺序使用HAVING子句进行分组筛选示例示例【演示示例6-4】分组筛选的应用【演示示例6-4】分组筛选的应用n在数据库SchoolDB的学生信息表Student中u查询年级总人数超过4的年级编号【演示示例6-4】分组筛选的应用需求需求n通过分组查询获取每个年级的总人数u使用GROUP BY子句,按照年级编号分组u使用COUNT()函数统计n在GROUP BY后面使用HAVING子句,条件:”COUNT(*)4”分析分析【演示示例6-4】分组筛选的应用分析代码分析代码【演示示例6-4】分组筛选的应用分析结果分析结果操作操作演示演示:分组筛选的应用:分组筛选
10、的应用n使用WHERE子句是不能满足查询要求的uWHERE子句只能对没有分组统计前的数据进行筛选n用HAVING子句来指定筛选的条件u该子句中的条件通常是统计函数u如:条件为“COUNT(*)4”【演示示例6-4】分组筛选的应用注意注意一起努力 共同提高【演示示例6-5】分组筛选的综合应用【演示示例6-5】分组筛选的综合应用n在数据库SchoolDB的成绩表Result中u统计每门科目及格总人数u统计及格学生的平均分达到80分的课程信息u按照平均分降序显示【演示示例6-5】分组筛选的综合应用需求需求n所查询的信息都是及格的信息u先从数据源中将不及格的学生信息进行滤除u使用WHERE子句n对符合
11、及格要求的数据再进行分组u通过分组查询获取每门课及格学生的人数和平均分u通过GROUP BY子句实现分组n筛选出平均分达到80分的课程信息u在分组统计出的平均分的基础上,使用HAVING子句【演示示例6-5】分组筛选的综合应用分析分析n步骤一:使用WHERE子句选择及格的信息n步骤二:使用GROUP BY对数据再进行分组n步骤三:使用HAVING筛选出平均分达到80分的课程信息【演示示例6-5】分组筛选的综合应用关键步骤关键步骤【演示示例6-5】分组筛选的综合应用分析代码分析代码【演示示例6-5】分组筛选的综合应用分析结果分析结果操作操作演示演示:分组筛选的综合应用:分组筛选的综合应用n理解各
12、子句的功能和使用顺序uWHERE子句uGROUP BY子句uHAVING子句uORDER BY子句n在所有子句中,ORDER BY子句一般都在最后u用于对查询最后结果的显示排序【演示示例6-5】分组筛选的综合应用注意注意一起努力 共同提高【技能训练6-2】分组筛选的综合应用【技能训练6-2】 分组查询和筛选的综合应用n灵活使用GROUP BY进行分组查询n应用HAVING子句对分组统计后的结果进行筛选n灵活应用多个子句解决实际问题uWHERE子句uGROUP BY子句uHAVING子句uORDER BY子句技能目标技能目标【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询年级总学时超过
13、50的课程数【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询每年级学生的平均年龄u年龄的计算精确到年份,不考虑月和日的信息【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询安徽地区的每年级学生人数【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询参加考试的学生中,平均分及格的学生记录u按照成绩降序排列【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询考试日期为2019年11月20日的科目的及格平均分u排除不及格的成绩后求平均分【技能训练6-2】分组筛选的综合应用需求分析需求分析n查询至少一次考试不及格的学生学号、不及格次数【技能训练6-2】分组筛选的综合应用需
14、求分析需求分析n在学生成绩表中,查询有两次及以上分数不低于85的学生的学号【技能训练6-2】分组筛选的综合应用n理解各子句的功能和使用顺序uWHERE子句从数据源中去掉不符合其搜索条件的数据uGROUP BY子句搜集数据行到各个组中u统计函数为各个组计算统计值uHAVING子句去掉不符合其组搜索条件的各组数据行uORDER BY子句对最后的结果进行显示排序【技能训练6-2】分组筛选的综合应用小结小结一起努力 共同提高知识技能结构图第1章 创建和管理数据库分组查询1 1多表查询子查询2 23 3目 录内容结构图n在实际应用中,很多查询需要的数据要来源于多张表u比如:在查询成绩的结果中显示学生姓名
15、和课程名称u涉及到三张表 成绩表Result 学生信息表Student 课程表Subjectn查询命令SELECT支持多表连接查询u内连接查询u外连接查询多表查询n内连接查询是最典型、最常用的连接查询,它根据表中共同的列来进行匹配。特别是两张表存在主外键关系时通常会使用内连接查询。nMySQL数据库中,内连接查询可以通过两种方式实现,一种是在FROM子句中使用INNER JOINON关键字,另一种是在WHERE子句中设置连接条件n在实际应用中,很多查询需要的数据要来源于多张表u比如:在查询成绩的结果中显示学生姓名和课程名称内连接查询n将查询需要数据所在的数据表分别列在FROM子句后面u表名之间
16、用逗号分隔n将表与表之间连接的条件作为WHERE子句的条件表达式分析分析在WHERE子句中指定连接条件 语法语法【演示示例6-6】2张表的内连接查询应用【演示示例6-6】2张表内连接查询的应用n数据库SchoolDB中,查询学生的成绩u显示学号、姓名、课程编号和成绩,按照学号排列【演示示例6-6】2张表的内连接查询应用需求需求n需要查询的结果来源于2张表,需要2张表连接查询n成绩表中的学号引用了学生信息表的学号,连接条件:学号相等nStudent和Result中学号列的名称都是“studentNo”u需要在列名的前面加上表的名称,并使用点“.”作为连接符u如:“Student. student
17、No”和“Result. studentNo”分析分析【演示示例6-6】2张表的内连接查询应用分析代码分析代码【演示示例6-6】2张表的内连接查询应用分析结果分析结果操作操作演示演示:2张表内连接查询的应用张表内连接查询的应用n多表列名相同问题的处理u只有当多表中存在相同名称的列时,需要使用“表名.列名”来区别u如果列名不相同时可以直接使用列名【演示示例6-6】2张表的内连接查询应用拓展拓展一起努力 共同提高n通过FROM子句中使用INNER JOINON关键字u不需要在WHERE子句中设计表连接的条件表达式u可以连接2张表,也可以连接3张表等分析分析在FROM子句中使用INNER JOINO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第06章 分组查询和多表查询-MySQL 06 分组 查询 MySQL
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内