考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

有关系S(SNO, SNAME, SDEPT,SAGE),C(CNO, CNAME),SC(SNO, CNO, GRADE)。其中SNO是学生号,SNAME是学生姓名,SDEPT是系别,SAGE是学生年龄, CNO是课程号,CNAME是课程名称,GRADE是成绩。要查询“计算机”系的没有不及格成绩的学生学号和姓名
A. SELECT Sno, Sname FROM S WHERE Sdept='计算机’ INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;
B. SELECT Sno, Sname FROM S WHERE Sdept='计算机’and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);
C. SELECT Sno, Sname FROM S WHERE Sdept='计算机’ EXCEPT SELECT SNO FROM SC WHERE GRADE<60;
D. SELECT Sno, Sname FROM S WHERE Sdept='计算机’and sno in (SELECT SNO FROM SC WHERE GRADE>=60);
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(3)

第一步先查询成绩不及格的学生学号:SELECT SNO FROM SC WHERE GRADE<60;将第一步的查询结果作为筛选条件,第二步再查询满足条件的记录,即“计算机”系且成绩及格的学生学号和姓名,因此正确答案为B选项。

在给出的选项中,我们需要选择一个能够查询出“计算机”系的没有不及格成绩的学生学号和姓名的SQL语句。以下是对每个选项的分析:

A.
```sql
SELECT SNO, SNAME FROM S
WHERE SDEPT='计算机'
INTERSECT
SELECT SNO, SNAME FROM SC
WHERE GRADE>=60;
```
分析:这个查询会选出“计算机”系的学生与成绩大于等于60分的学生的交集,然而这并不能确保学生没有不及格的成绩,因为一个学生可能有部分成绩不及格,但仍然会出现在成绩大于等于60分的结果集中。

B.
```sql
SELECT SNO, SNAME FROM S
WHERE SDEPT='计算机' AND SNO NOT IN
(SELECT SNO FROM SC WHERE GRADE<60);
```
分析:这个查询首先选出“计算机”系的学生,然后排除掉那些有不及格成绩(成绩小于60)的学生。这意味着选出的学生没有任何不及格的成绩。这个查询是正确的。

C.
```sql
SELECT SNO, SNAME FROM S
WHERE SDEPT='计算机'
EXCEPT
SELECT SNO FROM SC
WHERE GRADE<60;
```
分析:这个查询有语法错误,因为`EXCEPT`操作符的两边需要有相同的列数和列名。这里左边的查询有两列(SNO, SNAME),而右边的查询只有一列(SNO)。因此,这个查询是错误的。

D.
```sql
SELECT SNO, SNAME FROM S
WHERE SDEPT='计算机' AND SNO IN
(SELECT SNO FROM SC WHERE GRADE>=60);
```
分析:这个查询选出“计算机”系且至少有一门课成绩大于等于60分的学生,但这并不能保证学生没有不及格的成绩。

综上所述,正确的答案是B:
```sql
SELECT SNO, SNAME FROM S
WHERE SDEPT='计算机' AND SNO NOT IN
(SELECT SNO FROM SC WHERE GRADE<60);
```

用户123500
没有不及格,双重否定就是肯定
用户116583
D不行:一个学生可能既有及格成绩,又有不及格成绩。当使用IN操作符筛选出有及格成绩的学生时,那些有不及格成绩的学生也可能因为有及格成绩而被包含进来,无法准确筛选出 “计算机” 系中没有不及格成绩的学生,所以不能得到正确数据。
用户82049
b/d意思不一样吗