第一步先查询成绩不及格的学生学号: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);
```