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

备考刷题,请到

CDA认证小程序

假定学生信息表是S(SNo, SName, Sex, Age),课程信息表是C(CNo, CName, Teacher),学生选课信息表是SC(SNo, CNo, Grade),一个学生可以选修多门课程,一门课程可以有多个学生选修,有的学生没有选课,有的课程没有学生选课,要查找所有学生的学号以及选修的课程号,正确的SQL语句是( )
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)

要查找所有学生的学号以及选修的课程号,将所有学生所在的学生信息表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语句。