1.查询不及格的课程、并按照课程号从大到小排列
Select coursenum From t_score Where score<60 Order By coursenum Desc
2.查询课程号为“003”且课程成绩在80分以上的学生的学号和姓名
这是比较基本的连接查询,sql语句如下所示
Select C.studentnum,C.sname From t_course A,t_score B ,t_student C
Where
A.coursenum=B.coursenum And C.studentnum=B.studentnum And B.score>60 And B.coursenum='c003'
3.求选了课程的学生人数
Select Count(*) From t_score
4.查询选修“叶平”老师所授课程的学生中,成绩最高的学生的姓名及成绩
这个题目稍微麻烦点,实现的sql也有好几种,单原理都是先找到叶平老师所教课程的课程号,之后对成绩表使用聚合函数max下面手机我写的sql语句
select C.*,A.score from t_score A,t_teacher B,t_student C,t_course D
where
A.studentnum=C.studentnum
and A.coursenum=D.coursenum
and D.teachernum=B.teachernum
and B.tname='叶平'
And A.score =(Select Max(score) From t_score Where coursenum=A.coursenum)
5.查询各个课程及相应的选修人数
还是简单的聚合函数和分组的使用,sql语句如下
Select Count(*) From t_score Group By coursenum
6.查询不同课程成绩相同的学生的学号、课程号、学生成绩
这个题目看起来好像有些复杂,主要还是考察自连接查询的使用,sql语句如下
Select Distinct A.studentnum,A.coursenum,A.score From t_score A,t_score B
Where A.coursenum!=B.coursenum And A.score=B.score
7.检索至少选修两门课程的学生的学号
还是考察聚合函数和having的使用sql语句如下
Select studentnum From t_score Group By studentnum Having Count(coursenum)>=2
8.查询全部学生都选修的课程号和课程名
这个题目综合性比较强,主要考察了聚合函数、having、子查询的使用,sql语句如下
Select coursenum,cname From t_course Where coursenum In(
Select t.coursenum from t_score t Group By t.coursenum Having Count(t.studentnum)=(Select Count(*) From t_student)
)
9.统计没门课程的学生选修人数(超过10人的课程才统计),要求输出课程号和选修人数,查询结果按照人数降序排列,若人数相同,按课程号升序排列
还是考察聚合函数,having,group by的使用
Select count(studentnum) 选修人数,coursenum From t_score Group By coursenum Having count(studentnum)>3 Order By count(studentnum)desc,coursenum
10.查询两门以上课程不及格的学生的学号及其平均成绩
考察聚合函数、分组、子查询的使用,sql语句如下
Select studentnum,Avg(score) From t_score Where studentnum In
(
Select studentnum From t_score Where score<60 Group By studentnum Having Count(coursenum)>2
) Group By studentnum
11.检索“004”课程分数小于60,按分数降序排列的学生的学号
Select studentnum From t_score Where coursenum='c004' And score<60 Order By score Desc
12.删除“002”同学的“001”课程的成绩
Delete From t_score Where studentnum='002' And coursenum='001'