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都会显示在结果中,即使他们没有选课记录。