基本信息
文件名称:第8章数据库查询.ppt
文件大小:2.1 MB
总页数:84 页
更新时间:2025-06-04
总字数:约9.84千字
文档摘要

【例20】查询2021010001号学生的平均成绩和最高成绩。USEteachingSELECTavg(score)AS平均成绩,max(score)AS最高成绩FROMscWHEREsno=20210100018.2.3聚合函数查询前面使用聚合函数返回的是表中选择出来的所有行数据的统计结果。如果需要按某一列数据的值进行分类,在分类的基础上再进行查询(例如,求每个专业的学生人数),前面的方法是无法实现的。8.3分组查询分组查询:采用GROUPBY子句语法:[GROUPBY[ALL]group_by_expression[,…n][WITH{CUBE|ROLLUP}]]语句位置8.3分组查询SELECTselect_list[INTOnew_table_name]FROMtable_list[WHEREsearch_conditions][GROUPBYgroup_by_list][HAVINGsearch_conditions][ORDERBYorder_list[ASC|DESC]]8.3分组查询1.简单分组没有使用CUBE或ROLLUP关键字的分组技术。【例21】查询“teaching”库中男生和女生的人数。USEteachingSELECTssex,count(ssex)人数FROMstudentGROUPBYssex8.3分组查询注意:指定GROUPBY时,选择列表(select)中任意非聚合表达式内的所有列都应包含在GROUPBY列表中,或者说GROUPBY表达式必须与选择列表表达式完全匹配。例:查询各专业的学生人数。又例:求每门课的平均分。8.3分组查询HAVING关键字可以对查询和统计的结果进行进一步的筛选【例22】在“sc”表中查询选修了两门及以上课程的学生学号和选课数。USEteachingSELECTsno,COUNT(cno)选修课程数FROMscGROUPBYsnoHAVINGCOUNT(cno)=28.3分组查询HAVING与WHERE子句的区别:WHERE子句是对整表中数据筛选满足条件的行,条件表达式中不会直接使用聚合函数;HAVING子句是对GROUPBY分组查询后产生的组再筛选出满足条件的组,条件中使用聚合函数。8.3分组查询2.CUBE和ROLLUP的使用【例23】在“teaching”库中查询“sc”表,求被选修的各门课程的平均成绩和选修该课程的人数,及所有课程的总平均成绩和总选修人数。USEteachingSELECTcno,AVG(score)AS平均成绩,COUNT(sno)AS选修人数FROMscGROUPBYcnoWITHCUBE8.3分组查询在实际应用中,经常需要同时从两个表或两个以上表中检索数据。实现从两个或两个以上表中检索数据且结果集中出现的列来自于两个或两个以上表中的检索操作被称为连接技术。在SQLServer中,连接操作又可以分为内连接、自连接、外连接、交叉连接等。8.4连接查询内连接把两个表中的数据连接生成第三个表,第三个表中仅包含那些满足连接条件的数据行。内连接使用INNERJOIN连接运算符,并且使用ON关键字指定连接条件。内连接是一种最常用的连接方式,所以JOIN关键字前面可以省略连接类型,默认为内连接。8.4.1内连接内连接的语法格式:SELECTselect_listFROM表1INNERJOIN表2ON连接条件或SELECTselect_listFROM表1,表2WHERE连接条件连接条件格式为:[表名1.]列名1比较运算符[表名2.]列名28.4.1内连接【例26】从“teaching”库中查询每个学生的姓名、课程号和成绩。USEteachingSELECTstudent.sname,sc.cno,sc.scoreFROMstudentINNERJOINscONstudent.sno=sc.sno也可以利用下面的语句来实现:SELECTstudent.sname,sc.cno,sc.scoreFROMstudent,scWHEREstudent.sno=sc.sno注意:当从多个表中查询的列名相同时,列名前必须加表名;列名不同时,列名前可以不加表名,但有时也会加上表名,以增强可读性