假定有三个关系,学生关系S、课程关系C和学生选课关系SC,它们的结构如下: S(S#,SN,Sex,Age,Dept),C(C#,CN),SC(S#,C#,Grade)。其中,S#为学生号,SN为姓名,Sex为性别,Age为年龄,Dept为系别,C#为课程号,CN为课程名,Grade为成绩。检索选修课程“C2”的学生中成绩最高的学生的学号,正确的SQL.语句是()。
A.SELECT S#FROM SC WHERE C#="C2" AND Grade IN (SELECT Grade FROM SC WHERE C#="C2")
B.SELECT S# FROM SC WHERE C#="C2" AND Grade>= (SELECT Grade FROM SC WHERE C#="C2")
C.SELECT S# FROM SC WHERE C#="C2" AND Grade>=ALL (SELECT Grade FROM SC WHERE C#="C2")
D.SELECT S# FROM SC WHERE C#="C2" AND Gtade NOT IN (SELECT Grade FROM SC WHERE C#="C2")
参考答案:C
解析:
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]… FROM <表名或视图名>[,<表名或视图名>] [WHERE <条件表达式>] [GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]…] 子句顺序为SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY,但SELECT和FROM是必须的,HAVING子句只能与GROUP BY搭配起来使用。SELECT子句对应的是关系代数中的投影运算,用来列出查询结果中的属性,其输出可以是列名、表达式、集函数(AVG、COUNT、MAX、MIN、SUM),DISTINCT选项可以保证查询的结果集中不存在重复元组;FROM子句对应的是关系代数中的笛卡儿积,它列出的是表达式求值过程中须扫描的关系;WHERE子句对应的是关系代数中的选择谓词。