学生表
课程表
成绩表
教师表
16.查询课程名称为“数据库”,且分数低于60分的学生姓名和分数。
SELECT sname,score, FORM student s, scores sc WHERE s.sno=sc.sno AND sc.score<60 AND sc.cno=(SELECT cno FORM c WHERE cname='数据库')
解题思路:需要检索出数据库的课程编号,两个表之间的关联条件为s.sno=sc.sno;
其它限制条件写在WHERE字句,sc.score<60。
17.查询所有学生的选课情况。
SELECT sname,cname FROM student s,course c,scores sc WHERE s.sno=c.sno AND sc.cno=c.cno
解题思路:检索学生姓名和课程名,两个表之间需要通过成绩进行关联。
18.查询课程成绩在70分以上的姓名、课程名称和分数。
SELECT sname,cname,score FROM student s,scores sc,course c WHERE s.sno=sc.sno AND sc.cno=c.cno AND score>70
解题思路:SELECT字句用到姓名、课程名和分数需要多表连接;
关联条件 s.sno=c.sno AND sc.cno=c.cno;
成绩在70分以上表示为score>70。
19.查询那些课程的分数小于60分,并按课程号从大到小排列。
SELECT cname FROM course c WHERE c.cno IN(SELECT cno FROM scores sc WHERE score<60) ORDER BY c.cno desc
20.查询课程编号为c001且课程成绩在80分以上的学生的学号和姓名。
SELECT sno,sname FROM student s WHERE sno IN(SELECT sno FROM scores WHERE cno='c001' AND score >80)
解题思路:主查询的限制条件是课程编号和课程成绩,子查询检索出课程编号为c001且课程成绩在80分以上的学号有哪些。
21.求选了课程的学生人数。
SELECT count(DISTINCT sno) FROM scores
解题思路:统计成绩表中的学号数,相同的去掉。
22.查询各个课程及相应的选修人数。
SELECT count(sno) FROM scores GROUP BY cno
解题思路:以课程编号分组,统计每组的学生编号数。
23.检索至少选修两门课程的学生学号。
SELECT sno FROM student s WHERE sno IN (SELECT sno FROM scores GROUP BY sno HAVING count(cno) >1)
解题思路:子查询以学号分组,限制条件是课程数大于1,即HAVING count(cno)>1,检索符合条件的学号对应的学生。