MySql面试题

MySql面试题

Student(S#,Sname,Sbirthday,Ssex)学生表:学号、姓名、生日、性别
Course(C#,Cname,T#)课程表:课程号、课程名称、教师工号
SC(S#,C#,Score)成绩表:学生学号、课程号、分数
Teacher(T#,Tname)教师表:教师工号、教师姓名
备注:成绩表中分数在60及以上代表及格;成绩为空代表缺考
请用SQL写出下列查询:
(1)查询缺考学生的学号、姓名、缺考课程名称、对应缺考科目老师姓名。

(2)查询2门及2门以上课程不及格同学的学号、姓名和不及格课程名称。

(3)查询各科目学生成绩排名,返回课程名称、学生学号、学生姓名、学生该课程排名。
说明:同一科目成绩相同时,排名并列;缺考学生不参与缺考科目排名;

答案

1.SELECT s.S#, s.Sname, c.Cname, t.Tname FROM Student s, Course c, SC sc, Teacher t WHERE s.S# = sc.S# AND c.C# = sc.C# AND t.T# = c.T# AND sc.Score IS NULL;

2.SELECT s.S#, s.Sname, c.Cname FROM Student s, Course c, SC sc WHERE s.S# = sc.S# AND c.C# = sc.C# AND sc.Score < 60 GROUP BY s.S# HAVING COUNT(*) >= 2;

3.SELECT c.Cname, sc.S#, s.Sname, COUNT(DISTINCT sc2.Score) + 1 AS rank FROM Course c, SC sc, SC sc2, Student s WHERE c.C# = sc.C# AND sc.S# = s.S# AND sc.C# = sc2.C# AND (sc.Score < sc2.Score OR (sc.Score = sc2.Score AND sc.S# > sc2.S#))) OR (sc.Score IS NULL AND sc.C# = sc2.C# AND sc.S# > sc2.S#) GROUP BY c.Cname, sc.S# ORDER BY c.Cname, rank;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值