数据库查询——第七章课后第一题

这篇博客主要展示了SQL在数据统计和分析中的应用,包括查询学生、课程和选课信息,统计课程门数,计算平均年龄,分析选课数量,查找特定课程的平均成绩,筛选特定条件的学生等。还涉及到了子查询、聚合函数、分组及条件过滤等高级查询技巧。
摘要由CSDN通过智能技术生成

数据库作业整理:

1.select * from student;

2.select * from sc;

 

3.select * from course;

 

--查询学生们有哪些专业,只显示专业列,过滤掉重复行

select distinct specialty "专业" from student;

 

--统计所有学生选修课的课程门数

select sno,count(cno) "选课数" from sc

group by sno;

--选课数

select count(distinct cno) from sc;

 

--求选修C004课程的学生的平均年龄

select b.cno,avg(a.sage)

from student a inner join sc b

on b.cno='C004' --on后跟连接条件

--使用聚合函数返回的是所有行数据的统计结果,如果需要按某一列数据的值进行分类,在分类的基础上进行查询

group by b.cno;

 

--学生的平均年龄

select  AVG(student.sage) "平均年龄" from student;

--查询选课的平均成绩

select b.cno,avg(b.score) as"平均分"

from student a inner join sc b

on a.sno=b.sno

group by b.cno;

 

--查询学生选课的平均成绩

select a.sname,avg(b.score) as"平均分"

from student a inner join sc b

on a.sno=b.sno

group by a.sname;

 

--求学分为3的各门课程的平均成绩

select a.credit ,avg(b.score) as "平均成绩"

from course a inner join sc b

on a.cno=b.cno and a.credit=3

group by a.credit

--要求输出课程号和选修人数

select cno "课程号" ,count(sno) "选课人数" from sc

group by cno;

--统计每门课程的学生选修人数,超过两人的课程才统计。

--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,则按课程号升序排列

select cno "课程号" ,count(sno)  "选课人数" from sc

group by cno  --group by把重复的课程号分为一组

having count(sno)>2 --使用having前必须使用group by分组

order by cno, count(sno)desc

--查询所有姓“刘”的学生的姓名和年龄

select student.sname "姓名",student.sage "年龄" from student

where sname like '%刘%'

--在sc表中检索成绩为空值的学生的学号和课程号

select sno "学号" ,cno "课程号" from sc

where score is null

 

--查询没有学生选修课的课的课程号和课程名

--回答:没有选课不存在课程号和课程名,只有选课了才有课程号,只能知道那个学号的学生没有选课

--男同学的平均年龄

select AVG(sage) "平均年龄" from student

where ssex='男'

--求年龄大于男同学平均年龄的女学生的姓名和年龄

select sname "姓名" ,sage "年龄"from student

where ssex='女' and sage>(

select AVG(sage) from student

where ssex='男')

 

--子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

--求年龄大于所有男同学年龄的女学生的姓名和年龄

select sname,sage from student

where ssex='女' and sage>All(

select sage from student where ssex='男' )

--查询选修课C001号课程的学生中成绩最高的学生的学号

select sno from SC

where CNO='C001' and SCORE=(

select MAX(score) from SC)

--查询学生的姓名及其所选修课程的课程号和成绩

select sname , cno , score

from student,SC

where Student.sno=SC.SNO

--求每个学生的总学分

select sno , SUM(credit) "总学分"from SC,course

where SC.CNO=course.cno

group by SNO

 

--查询每门课成绩最低的学生的学号和课程号

select sno ,cno from SC

where SCORE in

(select MIN(score) from SC)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kiki,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值