要查找所有学生的学号以及选修的课程号,将所有学生所在的学生信息表S作为主表,与被选修的课程所在的学生选课信息表SC进行表连接,以上选项中只有D选项是将S作为主表进行横向连接。
正确答案是:D: SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO;
专业分析如下:
1. **题目要求**:查找所有学生的学号以及选修的课程号。需要注意的是,有的学生没有选课,因此需要包含所有学生的信息,即使他们没有选修任何课程。
2. **选项分析**:
- **A: SELECT SNO,CNO FROM GRADE;**
- 这个选项有误,因为表名应为SC(学生选课信息表),而不是GRADE。
- **B: SELECT S.SNO,CNO FROM S INNER JOIN SC ON S.SNO=SC.SNO;**
- INNER JOIN 只会返回两个表中都有匹配记录的行。如果某个学生没有选修任何课程,这个学生的信息将不会出现在结果中,不符合题目要求。
- **C: SELECT S.SNO,CNO FROM S OUTER JOIN SC ON S.SNO=SC.SNO;**
- OUTER JOIN 不是标准的SQL语法,SQL标准中定义的是LEFT JOIN、RIGHT JOIN和FULL JOIN。
- **D: SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO;**
- LEFT JOIN 会返回左表(学生信息表)中的所有记录,即使右表(学生选课信息表)中没有匹配的记录。这正好符合题目要求,因为即使某个学生没有选修任何课程,该学生的学号也会出现在结果中。
综上所述,选项D是正确的SQL语句。