首页 > 数据库 > > SQL 经典50题练习之41-50题
QL语句可能因数据库系统不同而存在少许差异。
测试数据请参照第一章节,各表查询结果如下图:

练习题目
41. 查询学过“01”并且也学过编号“02”课程的同学的学号、姓名
42. 查询学生的总成绩并进行排名
43. 查询不同老师所教不同课程平均分从高到低显示
44. 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
45. 查询学生平均成绩及其名次
46. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
47. 查询本周过生日的学生
48. 查询下周过生日的学生
49. 查询本月过生日的学生
50. 查询下月过生日的学生
参考答案
--------------------------------------------------------
--41. 查询学过“01”并且也学过编号“02”课程的同学的学号、姓名
select Student.SId,Student.Sname from Student,SC where Student.SId=SC.SId and SC.CId='01'and exists( Select * from SC as SC_2 where SC_2.SId=SC.SId and SC_2.CId='02')输出结果

--42. 查询学生的总成绩并进行排名
select sid,sum(score) as 总成绩,rank()over(order by sum(score) desc) as 总成绩排名 from sc group by SId输出结果

--43. 查询不同老师所教不同课程平均分从高到低显示
select t1.*,t2.avgs from Course t1 ,(select cid,avg(score) as avgs from SC group by cid ) t2where t1.CId=t2.CId order by t2.avgs desc输出结果

--44. 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
select t1.*,t2.CId,t2.score,t2.成绩排名
from student t1,(select sid, CId,score, dense_rank()over(partition by cid order by score desc) as 成绩排名 from SC)t2 where t1.SId=t2.SIdand t2.成绩排名 in(2,3)输出结果

--45. 查询学生平均成绩及其名次
select SId,avg(score) as 平均成绩,ROW_NUMBER()over(order by avg(score) desc) as 名次 from SC group by SId输出结果

--46. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
select student.SId,student.Sname,TIMESTAMPDIFF(YEAR,student.Sage,CURDATE()) as 学生年龄from student此题为mysql语句
--47. 查询本周过生日的学生
select *from student where datepart(WEEK,getdate())=datepart(WEEK,Student.Sage)--48. 查询下周过生日的学生
select *from student where datepart(WEEK,getdate())+1=datepart(WEEK,Student.Sage)--49. 查询本月过生日的学生
select * from Studentwhere MONTH(student.sage)=MONTH(getdate())--50. 查询下月过生日的学生
select * from Studentwhere MONTH(student.sage)=MONTH(getdate())+1来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3144166/ ,如需转载,请注明出处,否则将追究法律责任。