资源描述:
《北大青鸟SQLserver课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1第五章数据查询(2)2回顾数据查询将按照一定的条件对表的的记录进行逐行筛选,然后把符合要求的组合成“记录集”返回给查询的用户,记录集的结构类似于表结构可以在查询中使用AS子句或者=重命名列名判断一行中的数据项是否为空,使用ISNULL使用TOP子句可以限制查询返回的行数ORDERBY子句用来对查询的结果进行排序,缺省按照升序排列,也可以按降序(DESC)来排列,还可以按照多列来排序在查询语句中,可以使用常量、表达式和运算符在查询中使用函数,能够像在程序中那样处理查询得到的数据项3目标在查询中使用聚合函数使用GROUPBY进行分组查询进行多表联结查询4问题成绩表中存
2、储了所有学员的成绩,我想知道:学员的总成绩、平均成绩、有成绩的学员总共有多少名怎么办?5聚合函数-1SUMAVGSELECTSUM(ytd_sales)FROMtitlesWHEREtype='business'SELECTSUM(ytd_sales),PriceFROMtitlesWHEREtype='business'×SELECTAVG(SCore)AS平均成绩FromScoreWHEREScore>=606聚合函数-2MAX、MINCOUNTSELECTAVG(SCore)AS平均成绩,MAX(Score)AS最高分,MIN(Score)AS最低分FromS
3、coreWHEREScore>=60SELECTCOUNT(*)AS及格人数FromScoreWHEREScore>=607问题如果不是统计所有人所有课程的总成绩而是想求每一门课的平均绩或者某个人的所有课的总成绩怎么办?8分组汇总9分组查询—GROUPBYSELECTCourseID,AVG(Score)AS课程平均成绩FROMScoreGROUPBYCourseID10分组查询—思考SELECTStudentID,CourseID,AVG(Score)AS课程平均成绩FROMScoreGROUPBYCourseID思考:执行以下的T-SQL:——结果如何?11分组
4、查询—多列分组第一次内部测试成绩第二次内部测试成绩第三次内部测试成绩补考成绩怎样统计每次的内部测试每个学员的平均成绩?12分组查询—多列分组SELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG(Score)AS内部测试平均成绩FROMScoreGROUPBYStudentID,CourseID13分组查询—问题在以上统计内部测试成绩的基础上,如果只想看补考的学员的成绩,怎么办?14分组查询—再看看增加条件:要求该学员的CourseID在分组内出现过一次以上……SELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG
5、(Score)AS内部测试平均成绩FROMScoreGROUPBYStudentID,CourseID15分组查询—HAVINGSELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG(Score)AS内部测试平均成绩FROMScoreGROUPBYStudentID,CourseIDHAVINGCOUNT(CourseID)>116分组查询—对比WHEREGROUPBYHAVINGWHERE子句从数据源中去掉不符合其搜索条件的数据GROUPBY子句搜集数据行到各个组中,统计函数为各个组计算统计值HAVING子句去掉不符合其组搜索条件的各组数
6、据行17分组查询—思考SELECT部门编号,COUNT(*)FROM员工信息表WHERE工资>=2000GROUPBY部门编号HAVINGCOUNT(*)>1思考:分析以下T-SQL的含义18多表联结查询—问题学员内部测试成绩查询的每次显示的都是学员的编号信息,因为该表中只存储了学员的编号;实际上最好显示学员的姓名,而姓名存储在学员信息表;如何同时从这两个表中取得数据?19多表联结查询—分类内联结(INNERJOIN)外联结——左外联结(LEFTJOIN)——右外联结(RIGHTJOIN)——完整外联结(FULLJOIN)交叉联结(CROSSJOIN)20SELEC
7、TS.SName,C.CourseID,C.ScoreFromScoreASCINNERJOINStudentsASSONC.StudentID=S.SCodeScoreStudentsIDCourseIDScore122300100100200297896776300381猜一猜:这样写,返回的查询结果是一样的吗?SELECTS.SName,C.CourseID,C.ScoreFromStudentsASSINNERJOINScoreASCONC.StudentID=S.SCode再猜一猜:以下返回多少行?SELECTS.SName,C.CourseID,C.