正确答案是:A: `select sname from student where studentID in (select studentID from scores where courseID = 0001 and score>=60)`
分析如下:
A: 该选项使用了子查询,首先从 `scores` 表中选择参加课程编号为0001且成绩大于等于60的学生编号,然后在 `student` 表中查找这些学生的姓名。这是一个正确的查询方式,可以准确找到所有参加0001号课程并且考试及格的学生姓名。
B: 该选项使用了单值子查询(即等号`=`),这意味着子查询只能返回一个值。如果子查询返回多个学生ID,SQL会报错。因此,这种方式不适用于查找多个符合条件的记录。
C: 该选项试图通过查找不及格的学生ID并排除他们来找到及格学生的姓名。然而,这种方法可能会导致错误,因为如果一个学生没有参加考试,他的记录不会出现在 `scores` 表中,这可能会导致该学生被错误地排除。
D: 该选项语法错误,`exists` 关键字的用法不正确。`exists` 通常用于检查子查询是否返回任何记录,而不是直接在 `where` 子句中使用 `studentID exists`。正确的用法应该是 `where exists (select ... where ...)`,并且需要关联外部查询和子查询。
因此,选项A是正确的查询方式。