第一步在sc表中先查询参加考试的学生学号:select sid from sc;将第一步的查询结果作为筛选条件,第二步再查询满足条件的学生,即student表中排除参加了考试的学生,剩下的就是没有参加考试的学生名单。
正确答案是:B: select sname from student where sid not in (select sid from sc);
专业分析:
我们需要查询没有参加考试的学生名单。数据库中有三个表:`student`(学生信息表)、`course`(课程信息表)和`sc`(成绩表)。其中,`sc`表记录了学生参加考试的成绩。
1. **选项A**:`select sname from student where sid in (select sid from sc);`
- 这个语句查询的是参加了考试的学生名单,而不是没有参加考试的学生名单。因此,这个选项不正确。
2. **选项B**:`select sname from student where sid not in (select sid from sc);`
- 这个语句查询的是学生表中那些学生ID不在成绩表中的学生,即没有参加考试的学生名单。这个选项是正确的。
3. **选项C**:`select sname from student;`
- 这个语句查询的是所有学生的名单,而不是特定条件下的学生名单。因此,这个选项不正确。
4. **选项D**:`select sid from sc;`
- 这个语句查询的是成绩表中的学生ID,即参加了考试的学生ID,而不是学生的姓名,更不是没有参加考试的学生名单。因此,这个选项不正确。
综上所述,正确的查询没有参加考试的学生名单的SQL语句是选项B。