单选题
VF
2017-05-03
设有学生表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选项错误。 选项D正确。
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选项错误。 选项D正确。
你可能感兴趣的试题
A.SELECT*FROM 学生 WHERE 出生日期>={^1982-03-20}AND性别="男"
B.SELECT*FROM 学生 WHERE 出生日期<={^1982-03-20}AND性别="男"
C.SELECT*FROM 学生 WHERE 出生日期>={^1982-03-20}OR性别="男"
D.SELECT*FROM 学生 WHERE 出生日期<{^1982-03-20}OR性别="男"
A.SELECT AVG(成绩)FROM选课WHERE姓名="刘明"
B.SELECT AVG(成绩)FROM学生,选课WHERE姓名="刘明"
C.SELECT AVG(成绩)FROM学生,选课wHERE学生.姓名="刘明"
D.SELECT AVG(成绩)FROM学生,选课WHERE学生.学号=选课.学号AND姓名="刘明"
3
设有学生(学号,姓名,性别,出生日期)和选课(学号,课程号,成绩)两个关系,并假定学号的第3、4位为专业代码。要计算各专业学生选修课程号为“101”课程的平均成绩,正确的SQL语句是______。
A.SELECT专业AS SUBS(学号,3,2),平均分AS AVG(成绩)FROM选课WHERE课程号="101"GROUP BY专业
B.SELECT SUBS(学号,3,2)AS专业,AVG(成绩)AS平均分FROM选课WHERE课程号="101"GROUP BY 1
C.SELECT SUBS(学号,3,2)AS专业,AYG(成绩)AS平均分FROM选课WHERE课程号="101"ORDER BY专业
D.SELECT专业AS SUBS(学号,3,2),平均分AS AVG(成绩)FROM选课WHERE课程号="101"ORDER BY 1