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

备考刷题,请到

CDA认证小程序

Given tables S(SNO, SNAME, SDEPT,SAGE), C(CNO, CNAME), SC(SNO, CNO, GRADE). SNO is student id, SNAME is name, SDEPT is department, SAGE is age. CNO is course id, CNAME is course name, GRADE is grade. To find id and name of students in "Computer" department with no failing grades:
A. SELECT Sno, Sname FROM S WHERE Sdept='Computer’ INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;
B. SELECT Sno, Sname FROM S WHERE Sdept='Computer’ and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);
C. SELECT Sno, Sname FROM S WHERE Sdept='Computer’ EXCEPT SELECT SNO FROM SC WHERE GRADE<60;
D. SELECT Sno, Sname FROM S WHERE Sdept='Computer’ and SNO in (SELECT SNO FROM SC WHERE GRADE>=60);
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

First get failing student ids:SELECT SNO FROM SC WHERE GRADE<60; Then filter for non-failing ids in Computer department as the second step. So option B is correct, which uses this subquery method to find qualifying students.

正确答案是:B:SELECT Sno, Sname FROM S WHERE Sdept='Computer’ and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);

### 专业分析:

#### 选项A:
```sql
SELECT Sno, Sname FROM S WHERE Sdept='Computer’
INTERSECT
SELECT Sno, Sname FROM SC WHERE GRADE>=60;
```
- 该查询试图使用 `INTERSECT` 操作符,来获取在两个子查询中都出现的学生。然而,`SC` 表中并没有 `Sname` 字段,因此这个查询是无效的。

#### 选项B:
```sql
SELECT Sno, Sname FROM S WHERE Sdept='Computer’
and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);
```
- 该查询首先从 `S` 表中选出计算机系的所有学生,然后通过子查询排除在 `SC` 表中有任意一门课程成绩低于60分的学生。
- 这个查询确保选出的学生没有任何不及格的课程成绩,因此是正确的。

#### 选项C:
```sql
SELECT Sno, Sname FROM S WHERE Sdept='Computer’
EXCEPT
SELECT SNO FROM SC WHERE GRADE<60;
```
- 该查询试图使用 `EXCEPT` 操作符,来排除在 `SC` 表中有不及格成绩的学生。然而,`EXCEPT` 操作符通常用于在两个结果集中排除匹配的行,但这里的两个子查询返回的字段不同(第一个子查询返回 `Sno, Sname`,第二个子查询只返回 `SNO`),因此这个查询也是无效的。

#### 选项D:
```sql
SELECT Sno, Sname FROM S WHERE Sdept='Computer’
and SNO in (SELECT SNO FROM SC WHERE GRADE>=60);
```
- 该查询从 `S` 表中选出计算机系的所有学生,然后通过子查询确保这些学生至少有一门课程成绩不低于60分。
- 这个查询没有排除那些有不及格成绩的学生,因此不符合题意。

综上所述,选项B是唯一正确的答案。