若要查询所有选了课的学生的学号和姓名,下列语句正确的是( D)

已知三个关系:S(学号,姓名,性别);C(课程编号,课程名称,学时)SC(学号,课程编号,分数)若要查询所有选了课的学生的学号和姓名,下列语句正确的是( D)
A.select 学号,姓名 from s WHERE 学号 in (select * from sc)
B.select 学号,姓名 from s WHERE in (select * from sc where s.学号=sc. 学号)
C.select学号,姓名 from s WHERE 学号 exists (select * from sc where s.学号=sc. 学号)
D.select学号,姓名 from s WHERE exists (select * from sc where s. 学号=sc. 学号)

A选项哪不对

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    正确选项为C。其他选项不正确的原因如下:

    A选项的语句错误,因为学号不能使用"in"关键字。应该使用"="或者"exists"关键字。

    B选项的语句错误,因为"where"后面只能跟条件表达式,而不能使用"in"关键字。应该使用"exists"关键字。

    D选项的语句虽然可以实现该查询,但是它的效率可能较低。因为使用了"exists"关键字,在执行时需要进行子查询中的每一行是否与外层表达式中的每一行匹配的比较,这会增加查询的时间复杂度。与之相比,C选项的"exists"子查询直接查找匹配,执行效率更高。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

只用学号去过滤,那只能从sc表拿学号对应的字段,select * 怎么匹配得上

不能select *,而是select distinct 学号