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

备考刷题,请到

CDA认证小程序

Given student table S(SNo, SName, Sex, Age), course table C(CNo, CName, Teacher), enrollment table SC(SNo, CNo, Grade). A student can enroll in multiple courses, a course can have multiple students. Some students have no enrollment, some courses have no students. To find all students' id and enrolled course id, the correct SQL statement is _____
A. SELECT SNO,CNO FROM GRADE;
B. SELECT S.SNO,CNO FROM S INNER JOIN SC ON S.SNO=SC.SNO;
C. SELECT S.SNO,CNO FROM S OUTER JOIN SC ON S.SNO=SC.SNO;
D. SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

To get all students' id and courses, the student table S should be the main table left joined with enrollment SC to include all students.

正确答案是 D: SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO。

### 分析:

1. **INNER JOIN (选项 B)**:
- `INNER JOIN` 只会返回在两个表中都有匹配记录的行。如果某些学生没有选课记录,或者某些课程没有学生,这些记录将不会包含在结果中。因此,这种连接方式不适合题目要求,因为它不能显示所有学生的ID。

2. **OUTER JOIN (选项 C)**:
- SQL标准中并没有直接的 `OUTER JOIN` 语法,通常使用 `LEFT JOIN`、`RIGHT JOIN` 或 `FULL OUTER JOIN` 来表示不同的外连接类型。由于 SQL 标准中没有 `OUTER JOIN` 这种明确的语法,所以选项 C 是不正确的。

3. **LEFT JOIN (选项 D)**:
- `LEFT JOIN` 会返回左表(学生表)中的所有记录,即使右表(选课表)中没有匹配的记录。这意味着即使某些学生没有选课记录,他们的ID也会显示在结果中,并且相应的课程ID会是NULL。这正好符合题目要求:显示所有学生的ID和选课的ID。

4. **错误的表名 (选项 A)**:
- 选项 A 提到的 `GRADE` 表在题目中并不存在。正确的表名应该是 `SC`,因此选项 A 是错误的。

### 结论:

选项 D 是正确的,因为 `LEFT JOIN` 确保所有学生的ID都会显示在结果中,即使他们没有选课记录。