您的位置:首页 > 职场人生

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

2017-09-16 11:00 155 查看

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

转自: http://www.cnblogs.com/qixuejia/p/3637735.html

(只转载部分题目)

表架构

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 a.S# = b.S#;


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 Student.S#


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、查询成绩排名的前三名;

以下引用自:http://www.cnblogs.com/freefenglei/p/5757874.html

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 )


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: