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` 只會返回在兩個表中都有匹配記錄的行。如果某些學(xué)生沒有選課記錄,或者某些課程沒有學(xué)生,這些記錄將不會包含在結(jié)果中。因此,這種連接方式不適合題目要求,因為它不能顯示所有學(xué)生的ID。
2. **OUTER JOIN (選項 C)**:
- SQL標(biāo)準(zhǔn)中并沒有直接的 `OUTER JOIN` 語法,通常使用 `LEFT JOIN`、`RIGHT JOIN` 或 `FULL OUTER JOIN` 來表示不同的外連接類型。由于 SQL 標(biāo)準(zhǔn)中沒有 `OUTER JOIN` 這種明確的語法,所以選項 C 是不正確的。
3. **LEFT JOIN (選項 D)**:
- `LEFT JOIN` 會返回左表(學(xué)生表)中的所有記錄,即使右表(選課表)中沒有匹配的記錄。這意味著即使某些學(xué)生沒有選課記錄,他們的ID也會顯示在結(jié)果中,并且相應(yīng)的課程ID會是NULL。這正好符合題目要求:顯示所有學(xué)生的ID和選課的ID。
4. **錯誤的表名 (選項 A)**:
- 選項 A 提到的 `GRADE` 表在題目中并不存在。正確的表名應(yīng)該是 `SC`,因此選項 A 是錯誤的。
### 結(jié)論:
選項 D 是正確的,因為 `LEFT JOIN` 確保所有學(xué)生的ID都會顯示在結(jié)果中,即使他們沒有選課記錄。