sql面试题(学生表课程表成绩表)



表架构

Student(S#,Sname,Sage,Ssex) 学生表 
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表

1、查询“001”课程比“002”课程成绩高的所有学生的学号;

SELECT a.S# FROM 
(SELECT S#, score FROM SC WHERE C# = '001') a,
(SELECT S#, score FROM SC WHERE C# = '002') b
WHERE a.score > b.score AND

2、查询平均成绩大于60分的同学的学号和平均成绩;

SELECT S#, AVG(score)
FROM SC
GROUP BY S#
HAVING AVG(score) > 60;

3、查询所有同学的学号、姓名、选课数、总成绩;

SELECT Student.S#, Student.Sname, COUNT(SC.C#), SUM(score)
FROM Student LEFT JOIN SC ON Student.S# = SC.S#
GROUP BY

4、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

SELECT Student.S#, Student.Sname, FROM Student, SC 
WHERE Student.S# = SC.S# AND
SC.C# = '001' AND
EXISTS (SELECT C# FROM SC AS SC_2 WHERE SC_2.S# = SC.S# AND SC_2.C# = '002')

5、查询所有课程成绩小于60分的同学的学号、姓名;

SELECT S#, Sname FROM Student
WHERE S# NOT IN (SELECT S.S# FROM Student AS S, SC
WHERE S.S# = SC.S# AND score > 60);

6、查询成绩排名的前三名;


SELECT* FROM Student a 
WHERE a.id IN (SELECT b.id FROM Student b
WHERE b.classId = a.classId
ORDER BY grade DESC
LIMIT 0,3) ;
或者

SELECT * FROM Student b
WHERE
NOT EXISTS(SELECT * FROM Student c
WHERE c.classId = b.classId AND b.grade < c.grade
GROUP BY c.classId
HAVING COUNT(*) > 3