问题 单项选择题

“学生—选课—课程”数据库中的三个关系:
S(S#,SNAME,SEX,AGE),SC(S#:,C#,GRADE),C(C#,CNAME,TEACHER)它们的主键用下画线标出。

“查询选修了三门以上课程的学生的学生号”,正确的SQL语句是( )。

A.SELECT S#FROM SC GROUP BY S# WHERE COUNT()>3

B.SELECT S# FROM SC GROUP BY S# HAVING COUNT()>3

C.SELECT S#:FROM SC ORDER BY S# HAVING COUNT()>3

D.SELECT S# FROM SC ORDER BY S# WHERE COUNT()>3

答案

参考答案:B

解析: GROUP BY子句会把在子句所有属性上具有相同值的元组分到一个分组中。ORDER…BY子句可以让查询结果中的元组按排列顺序显示。WHERE子句对应关系中的选择谓词,包括一个作用在FROM子句中关系的属性上的谓词。COUNT是聚集函数,通常作用于GROUP BY形成的分组。综上所述,应该首先选GROUP BY子句,而WHERE子句作用于FROM子句中的关系,而非GROUP BY子句形成的分组,所以应选HAVING子句而非WHERE子句。由此可知,正确答案是B。

选择题
单项选择题