提示:本篇文章是在上篇文章的基础上进行单表数据查询操作的补充,主要以例题的方式呈现.
文章目录
- 前言
- 1.分组:统计各门课程的选修人数
- 2.分别统计男女生的平均年龄
- 3.查询所有科目成绩在85分以上的学生的学号及其平均分
- 4.查询平均年龄大于18岁的系部和平均年龄
- 5.DRDER BY子句:查询选修课程2101的所有学生信息,并按成绩降序排列
- 6. INTO 子句:查询sc表中课程号为2101的记录,并将结果保存进表scl
- 7.查询学生的详细信息,并返回学生的总人数和平均年龄
- 8.查询学生的详细信息,同时返回每个年龄段的学生的总人数和平均年龄
- 9.知识点总结
- 总结
前言
1.分组:统计各门课程的选修人数
select cno 课程号,COUNT(cno) 选课人数 from sc group by cno
2.分别统计男女生的平均年龄
select ssex 性别,AVG(sage) 平均年龄 from student group by ssex
3.查询所有科目成绩在85分以上的学生的学号及其平均分
select sno,AVG(grade) 平均分 from sc group by sno having MIN(grade)>=85
4.查询平均年龄大于18岁的系部和平均年龄
select sdept 院系,AVG(sage) 平均年龄 from student group by sdept having AVG(sage)>18
5.DRDER BY子句:查询选修课程2101的所有学生信息,并按成绩降序排列
select * from sc WHERE cno='2101' ORDER BY grade DESC
6. INTO 子句:查询sc表中课程号为2101的记录,并将结果保存进表scl
select * INTO scl from sc WHERE cno='2101'
7.查询学生的详细信息,并返回学生的总人数和平均年龄
select * from student
order by sage
COMPUTE COUNT(sno),AVG(sage)
8.查询学生的详细信息,同时返回每个年龄段的学生的总人数和平均年龄
select * from student
order by sage
COMPUTE COUNT(sno) ,AVG(sage)BY sage
9.知识点总结
(1)分组查询——group by
select
聚合函数,
列(要求出现在group by的后面)
from
表
where
筛选条件
group by
分组的列表
order by
子句
注意:除了出现在group by后面的字段,如果要在select后查询其他字段,必须用聚合函数进行聚合.
特点:
分组查询中的筛选条件分为两类:
分组前筛选: 数据源是原始表,用where,放在group by前面,因为在分组前筛选
分组后筛选:数据源是分组后的结果集 ,用having,放在group by后面,因为在分组后进行筛选。
✨用group by 的select字句中,只能选择集合函数和出现在group by字句中的分组列。
✨但对组用 having 进行筛选时,having字句使用的集合函数表达式包含的列可以不包含在select字句的选择列中。
select bookID,sum(quentity) as 销售册数
from book
group by bookid
(2).排序——order by
select
…
from
…
where
…
order by
字段名
当我们查询出结果后,根据结果集中的某个字段进行排序,order by 字段名 排序方式(升序/降序)
order by默认采用升序(asc,如果存在 where 子句,那么 order by 必须放到 where 询句后面。
(3)INTO子句 功能是将查询结果保存到新的基表中
根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。 new_table 的格式通过对选择列表中的表达式进行取值来确定。 new_table 中的列按选择列表指定的顺序创建。 new_table 中的每列与选择列表中的相应表达式具有相同的名称、数据类型和值
(4)COMPUTE子句
compute 比 group by 更高级,group by 可以查看某一类的函数计算;而compute不光能实现这个效果,还可以显示出每一类的每一条数据。
select *
from book
compute sum(quentity)
总结
今天的内容分享就到这里啦,如果对友友们有帮助的话记得点赞收藏博客,关注后续的SQL Sever学习内容哦~👻👻👻