Visual FoxPro数据库程序设计

单选题设有学生选课表SC(学号,课程号,成绩),用SQL检索同时选修课程号为“C1”和“C5”的学生的学号的正确命令是(  )。A SELECT学号RORM SCWHERE课程号='C1'AND课程号='C5'B SELECT学号RORM SCWHERE课程号='C1'AND课程号=(SELECT课程号FROM SC WHERE课程号='C5')C SELECT学号RORM SCWHERE课程号='C1'AND学号=(SELECT学号FROM SC WHERE课程号='C5')D SELECT学号RORM

题目
单选题
设有学生选课表SC(学号,课程号,成绩),用SQL检索同时选修课程号为“C1”和“C5”的学生的学号的正确命令是(  )。
A

SELECT学号RORM SC
WHERE课程号='C1'AND课程号='C5'

B

SELECT学号RORM SC
WHERE课程号='C1'AND课程号=(SELECT课程号FROM SC WHERE课程号='C5')

C

SELECT学号RORM SC
WHERE课程号='C1'AND学号=(SELECT学号FROM SC WHERE课程号='C5')

D

SELECT学号RORM SC
WHERE课程号='C1'AND学号IN(SELECT学号FROM SC WHERE课程号='C5')

参考答案和解析
正确答案: C
解析:
内层的查询得到的结果是一个集合,所以,判断学号是否属于这个集合,用IN,如果内层查询的结果是个值,那么可以用“=”。这里显然不可以。又因为在一个元组中课程号不可能既是“C1”,又是“C5”。所以A项用一个查询的结果是没有这样的学号的。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

查询选修课程号为“101”课程得分最高的同学,正确的SQL语句是 ______。

A.SELECT 学生.学号,姓名FROM 学生,选课WHERE 学生.学号=选课.学号 AND 课程号=“101” AND 成绩>=ALL (SELECT 成绩 FROM 选课)

B.SELECT 学生.学号,姓名FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 成绩>=ALL(SELECT 成绩 FROM 选课 WHERE 课程号=“101”)

C.SELECT 学生. 学号,姓名 FROM 学生,选课 WHERE 学生. 学号=选课.学号 AND 成绩>=ANY (SELECT 成绩 FROM 选课 WHERE 选课号=“101”)

D.SELECT 学生.学号,姓名 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 课程号=“101”AND 成绩>= ALL(SELECT 成绩 FROM 选课 WHERE课程号=“101”)


正确答案:D
解析:选项A中的子查询并没有限定选择“课程号”为“101”,则此命令选择出来的结果是“101”课程得分大于等于所有科目成绩的记录,如果其余课目的成绩有记录大于“101”科目的最高成绩,则此查询无结果,此选择错误。
选项B中的查询并没有限定选择“课程号”为“101”,则此命令选择出来的结果是所有课程得分大于等于所有“101”科目成绩的记录,如果其余课目的成绩有记录大于“101”科目的最高成绩,则此查询将查询出错误结果,此选项错误。
选项C中的查陶并没有限定选择“课程号”为“101”,则此命令选择出来的结果是所有课程得分大于等于任意“101”科目成绩的记录,此查询将查询出错误的结果,此选项错误。

第2题:

设学生表 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

第3题:

设有学生选课表SC(学号,课程号,成绩),用SQL检索同时选修课程号为“C1”和“C5”的学生的学号的正确命令是______。

A.SELECT 学号 FROM SC WHERE 课程号='C1' AND 课程号='C5'

B.SELECT 学号 FROM SC WHERE 课程号='C1' AND 课程号=(SELECT 课程号 FROM SC WHERE 课程号='C5')

C.SELECT 学号 FROM SC WHERE 课程号='C1' AND 学号=(SELECT 学号 FROM SC WHERE 课程号;='C5')

D.SELECT 学号 FROM SC WHERE 课程号='C1' AND 学号 IN(SELECT 学号 FROM SC WHERE 课程号='C5')


正确答案:D
解析:本题建立的是SELECT—SQL命令的嵌套查询语句。在这个命令中要用到两个SELECT—FROM— WHERE查询块,即内层查询块和外层查询块,通过查询块检索同时选修课程号为“C1”和“C5”的学生的学号。

第4题:

查询选修C2课程号的学生姓名,下列SQL语句中错误的是 ______。

A.SELECT 姓名 FROM S WHERE EXISTS (SELECT*FROM SC WHERE 学号=S.学号 AND 课程号='C2')

B.SELECT 姓名 FROM S WHERE 学号 IN (SELECT 学号 FROM SC WHERE 课程号='C2')

C.SELECT 姓名 FROM S JOIN SC ON S.学号=SC.学号 WHERE 课程号='C2'

D.SELECT 姓名 FROM S WHERE 学号= (SELECT 学号 FROM SC WHERE 课程号='C2')


正确答案:D
解析:要求查询选修C2课程号的学生的姓名,姓名字段在S表中,而课程号在SC表中,可知查询的结果来自一张表,而条件来自另一张表,所以这里可以用简单的连接查询或者用嵌套查询。
  选项A使用谓语EXISTS进行查询,EXISTS或NOT EXISTS是用来检查在子查洵中是否有结果返回(即存在元组或不存在元组)。选项A先查询出SC表中选修了C2课程的所有信息,并指定SC表和S表通过学号公共字段建立联系,接着查询出姓名字段所对应的值,这种查询是可以达到目的的。
  选项B是一个嵌套查询,首先在SC表中查出选修了C2课程的学生的学号,接着找出这些学号在S表中所对应的学生的姓名,从而查询出选修了C2课程的学生的姓名。
  选项C是一个连接查询,SC表和S表首先通过学号字段建立连接,再找出选修了C2课程的学生的姓名。
  选项D中先找出选修了C2课程的学生的学号,因为选修C2课程的学生可能不止一个,因此不能直接用“=”号,而应该用“IN",IN相当于集合运算符∈,所以选项D是错误的。

第5题:

查询成绩在70分至85分之间学生的学号、课程号和成绩,正确的SQL语句是 ______。

A.SELECT 学号,课程号,成绩FROM sc WHERE 成绩 BETWEEN 70 AND 85

B.SELECT 学号,课程号,成绩FROM sc WHERE 成绩>=70 OR 成绩<=85

C.SELECT 学号,课程号,成绩FROM sc WHERE 成绩>=70 OR<=85

D.SELECT 学号,课程号,成绩FROM sc WHERE 成绩>=70 AND<=85


正确答案:A
解析:查询成绩在70分至85分之间学生的学号、课程号和成绩,这三个字段都在SC表中,因此查询结果应该是从SC表,成绩在70到85分之间是指包括边界70分和85分,A选项“WHERE 成绩 BETWEEN 70 AND 85”等价于“成绩>=70 and成绩<=85”,是符合题意的,所以选项A是正确的。成绩在70到85之间指成绩既要大于等于70又要小于等于85,两个条件之间的关系应该为“且”的关系,所以选项B、C均不正确。成绩小于等于85应该指明字段的字段名,所以选项D的表达式也是不正确的。

第6题:

设有学生选课表 SC( 学号 , 课程号 , 成绩 ) , 用 SQL 检索同时选修课程号为 “ C1 ” 和 “ C5 ” 的学生的学号的正确命令是

A) SELECT 学号 FROM SC WHERE 课程号 = ' C1 ' AND 课程号 = ' C5 '

B) SELECT 学号 FROM SC WHERE 课程号 = ' C1 ' AND 课程号 =(SELECT 课程号 FROM SC WHERE课程号 = ' C5 ' )

C) SELECT 学号 FROM SC WHERE 课程号 = ' C1 ' AND 学号 =(SELECT 学号 FROM SC WHERE 课程号 = ' C5 ' )

D) SELECT 学号 FROM SC WHERE 课程号 = ' C1 ' AND 学号 IN (SELECT 学号 FROM SC WHERE 课程号 = ' C5 ' )


正确答案:D

第7题:

设有SC (学号,课程号,成绩)表,下面SQL的SELECT语句检索成绩高于或等于平均成绩的学生的学号。

SELECT 学号 FROM sc

WHERE 成绩>=(SELECT【 】FROM sc)


正确答案:AVG(成绩)
AVG(成绩) 解析:检索成绩高于或等于平均成绩的学生的学号,首先应计算出SC表中的学生的平均成绩再找出成绩高于或等于平均成绩的学生的学号,计算平均成绩应使用AVG()函数,所以可以使用命令:SELECT学号FROM sc WHERE成绩>=(SELECT AVG(成绩)FROM sc) 。

第8题:

设有学生表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选项错误。

第9题:

查询有选课记录,但没有考试成绩的学生的学号和课程号,正确的SQL语句是 ______。

A.SELECT 学号,课程号 FROM sc WHERE 成绩=""

B.SELECT 学号,课程号 FROM sc WHERE 成绩=NULL

C.SELECT 学号,课程号 FROM sc WHERE 成绩 IS NULL

D.SELEC T学号,课程号 FROM sc WHERE 成绩


正确答案:C
解析:在SC表中成绩字段为数值型数据且初始为空值,本题要求查询出有选课记录,但没有考试成绩的学生的学号和课程号,只要成绩记录为空就说明没有考试成绩,即查询成绩字段为空值。查询空值时要使用IS NULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能使用“=”这样的运算符进行比较,所以选项C的语法是正确的。

第10题:

查询选修C2课程号的学生姓名,下列SQL,语句中错误的是( )。

A.SELECT姓名FROM S WHERE EXISTS (SELECT*FROM SC WHERE学号=S.学号AND 课程号=’C2’)

B.SELECT姓名 FROM S WHERE学号IN (SELECT学号FROM SC WHERE课程号=’C2 ’)

C.SELECT姓名FROM S JOIN SC ON S.学号=SC. 学号WHERE课程号=’C2’

D.SELECT姓名FROM S WHERE学号= (SELECT学号FRM SC WHERE课程号=’C2’)


正确答案:D
D。【解析】选项D中的内查询SELECT学号FROMSCWHERE课程号=”C2”的查询结果有可能为多个,而选项D中的外层查询WHERE子句后面的逻辑表达式使用“=”,这样会导致产生错误的结果。

更多相关问题