(本科)第06章分组查询和连接查询ppt课件.pptx
《(本科)第06章分组查询和连接查询ppt课件.pptx》由会员分享,可在线阅读,更多相关《(本科)第06章分组查询和连接查询ppt课件.pptx(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第06章 分组查询和连接查询数据库设计与应用主讲:张成叔微信(QQ):7153265 微信公众号:张成叔第 6 章 分组查询和多表连接查询第 6 章 分组查询和多表连接查询 分组查询2 2 多表连接函数1 1目 录实际需求n每学期的学生人数各是多少?问题问题实际需求n每学期的学生人数各是多少?问题问题第1学期人数第3学期人数第5学期人数三组分组查询GROUP BY子句n分组查询子句SELECT FROM WHERE GROUP BY SELECT GradeId AS 学期学期,COUNT(*) AS 人数人数 FROM Student GROUP BY GradeId演示:分组查
2、询SELECT列表中只能包含1. 被分组的列2. 为每个分组返回一个值的表达式,如聚合函数注意注意!讲解讲解 演示演示分组查询GROUP BY子句n如何查询每门课程的平均分?n 按照什么进行分组? 问题问题 提问提问SELECT SubjectId AS 课程号课程号, AVG(StudentResult) AS 平均平均分分 FROM Result GROUP BY SubjectId分组查询GROUP BY子句 演示演示演示:分组查询分组查询GROUP BY子句n查询每门课程的平均分,并且按照分数升序显示SELECT SubjectId AS 课程号课程号, AVG(StudentResu
3、lt) AS 平均平均分分 FROM Result GROUP BY SubjectId ORDER BY AVG(StudentResult) 问题问题 演示演示演示:分组查询实际需求n统计每学期男女同学的人数,如何实现? n 对学生进行分组,先按照学期、再按照性别n 计算每组学生的总人数 问题问题分析分析多列分组查询n统计每学期男女同学的人数,如何实现? 讲解讲解年级分组性别分组SELECT GradeId AS 年级年级,Sex AS 性别性别, COUNT(*) AS 人数人数 FROM Student GROUP BY GradeId,Sex ORDER BY GradeIdn OR
4、DER BY 子句在这里的作用? 提问提问多列分组查询演示:多列分组 演示演示实训 使用分组查询学生相关信息 n需求说明u查询每个年级的总学时数,并按照升序排列u查询每个参加考试的学员的平均分u查询每门课程的平均分,并按照降序排列u查询每个学生参加的所有考试的总分,并按照降序排列练习练习完成时间:15分钟实际需求n如何获得总人数达到5人的学期问题问题实际需求n如何获得总人数达到5人的学期问题问题n分组筛选子句SELECT FROM WHERE GROUP BY HAVINGSELECT GradeId AS 学期学期,COUNT(*) AS 人数人数 FROM Student GROUP BY
5、 GradeId HAVING COUNT(*)=5 演示演示 语法语法分组筛选HAVING子句演示:分组筛选n查询平均分数达到及格的科目信息SELECT SubjectId AS 课程编号课程编号,AVG(StudentResult) AS 课程平均成绩课程平均成绩 FROM Result GROUP BY SubjectId HAVING AVG(StudentResult)=60 演示演示分组筛选HAVING子句演示:分组筛选WHERE与HAVING对比nWHERE子句u用来筛选 FROM 子句中指定的操作所产生的行 nGROUP BY子句u用来分组 WHERE 子句的输出 nHAVIN
6、G子句u用来从分组的结果中筛选行 WHEREGROUP BYHAVING讲解讲解n查询每门科目及格总人数和及格学生的平均分SELECT SubjectId AS 课程课程,COUNT(*) AS 人数人数,AVG(StudentResult) AS 平均平均分分 FROM Result WHERE StudentResult=60 GROUP BY SubjectId 演示演示分组筛选HAVING子句演示:分组筛选n查询每门科目及格总人数和及格平均分在80分以上的信息SELECT SubjectId AS 课程课程,COUNT(*) AS 人数人数,AVG(StudentResult) AS
7、平均平均分分 FROM Result WHERE StudentResult=60 GROUP BY SubjectId HAVING AVG(StudentResult)=80 演示演示分组筛选HAVING子句演示:分组筛选n查询“有两次及以上分数不低于85的学生的学号”SELECT StudentNo,COUNT(*) AS 次数次数 FROM Result WHERE StudentResult=85 GROUP BY StudentNo HAVING COUNT(*)1 演示演示分组筛选HAVING子句演示:分组筛选实训 使用HAVING子句查询n需求说明u查询每学期学时超过50的课程
8、数u查询每学期学生的平均年龄u查询安徽地区的每学期学生人数u查询参加考试的学生中,平均分及格的学生信息,并按成绩降序排列u查询至少一次考试不及格的学生学号、不及格次数练习练习完成时间:15分钟n关键点分析u 需求2中计算学生的年龄u 由出生日期计算年龄,使用函数DATEDIFF()u 与当前的日期比较,计算出天数差,然后天数差除以365得学生的年龄u 每年约等于365天实训 使用HAVING子句查询DATEDIFF(dd,BornDate,GETDATE()/365讲解讲解n关键点分析u 需求6中至少一次不及格的信息u WHERE进行不及格的条件限定u 再根据学号来分组获取所需信息实训 使用H
9、AVING子句查询讲解讲解SELECT StudentNo AS 学号学号,COUNT(*) AS 不及格不及格次数次数 FROM Result WHERE StudentResult= 2000 GROUP BY 部门编号部门编号 HAVING COUNT(*) 1思考n分析以下T-SQL语句的作用 提问提问查询有多个员工的工资不低于2000 的部门编号 !共性问题集中讲解n常见问题及解决办法n代码规范问题n调试技巧共性问题集中讲解 一起努力 共同提高 分组查询1 1 多表连接函数2 2目 录实际需求n如何同时从这两个表中取得数据问题问题学号学号姓名姓名年级年级G1263201王子洋王子洋5
10、G1263382张琪张琪5G1263458项宇项宇5学号学号科目科目分数分数G12632011376G12634581392G12633821379常用的多表连接查询n内连接(INNER JOIN)n外连接u左外连接 (LEFT JOIN)u右外连接 (RIGHT JOIN)讲解讲解内连接n使用比较运算符根据表的相同列中的值匹配两个表中的行Student StudentResult 讲解讲解学号学号姓名姓名年级年级G1263201王子洋王子洋5G1263382张琪张琪5G1263458项宇项宇5学号学号科目科目分数分数G12632011376G12634581392G12633821379相同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科第06章 分组查询和连接查询ppt课件 本科 06 分组 查询 连接 ppt 课件
限制150内