设有学生表S(学号,姓名,性别,年龄)、课程表C(课程号,课程名,学分)和学生选课表SC(学号,课程号,成绩),检索学号、姓名和学生所选课程的课程名和成绩,正确的SQL命令是______。

admin2009-03-17  32

问题 设有学生表S(学号,姓名,性别,年龄)、课程表C(课程号,课程名,学分)和学生选课表SC(学号,课程号,成绩),检索学号、姓名和学生所选课程的课程名和成绩,正确的SQL命令是______。

选项 A、SELECT 学号,姓名,课程名,成绩 FROM S,SC,C    WHERE S.学号=SC.学号 AND SC.学号=C.学号
B、SELECT 学号,姓名,课程名,成绩    FROM(S JOIN SC ON S.学号=SC.学号) JOIN C ON SC.课程号=C.课程号
C、SELECT S.学号,姓名,课程名,成绩    FROM S JOIN SC JOIN C ON S.学号=SC.学号 ON SC.课程号=C.课程号
D、SELECT S.学号,姓名,课程名,成绩    FROM S JOIN SC JOIN C ON SC.课程号=C.课程号 ON S.学号=SC.学号

答案D

解析 此题是一个联接查询,联接查询是一种基于多个关系的查询。在SQL查询语句中建立两表间的连接可使用JOIN关键字连接其左右两个<表名>所指的表,JOIN为普通连接,在Visual FoxPro中称为内部连接,即只有满足连接条件的记录才出现在查询结果中。用ON子句指定连接条件:也可以一次性在WHERE子句中指定连接条件和筛选条件。格式如下:
   SELECT <目标列表达式>
   FROM[[<表名1>|<视图名1>][[INNE]
   JOIN <表名2>|<视图名1>]...ON<连接条件>]...
   FROM[[<数据库名>]<owner>{<表名>|<视图名>}
   [,[[<数据库名>.]<owner>{<表名>|<视图名>}...
   [WHERE<条件表达式>]
   [GROUP BY<列名1>
   [HAVING<内部函数表达式>]]
   [ORDER BY<列名2> {ASC/DESC}]
所以A、B选项错误,如果先连接学生表S和学生选课表SC,会造成结果中有不符合要求的多余记录,所以C选项错误。
转载请注明原文地址:https://kaotiyun.com/show/KU7Z777K
0

最新回复(0)