全部问题 > 当前问题

嵌套循环如果用in的话,主句中where 后面的字段名和括号中select后面的字段名难道可以不一样吗

select 姓名 from s where 学号 in (select * from sc where 课程号="A001") 这个语句为什么是对的? 难道不应该把in 改成 exsists,或把括号中的*改成学号吗

缘、结之‘世’ 2017-2-19 09:00:45

共 1 个回答

卷卷 2017-2-19 11:40:15

亲爱的 *的意思就是主键哦  这个符号在数据库里也有用到的  是比较方便的表示 所以表示学号是没有问题的

IN是判断学号是否是后面集合的子集 记住哦

问题来自: 嵌套
基于学生表S和学生选课表SC两个数据库表,它们的结构如下: 
S(学号,姓名,性别,年龄),其中学号、姓名和性别为C型字段,年龄为N型字段。 
SC(学号,课程号,成绩),其中学号和课程号为C型字段,成绩为N型字段(初始为空值)。

查询选修C2课程号的学生姓名,下列SQL语句中错误的是 ______ 。
A. SELECT 姓名 FROM S WHERE EXISTS;
   (SELECT * FROM SC WHERE 学号=S.学号 AND 课程号='C2')
B. SELECT 姓名 FROM S WHERE 学号 IN;
   (SELECT * FROM SC WHERE 课程号='C2')
C. SELECT 姓名 FROM S JOIN SC ON S.学号=SC.学号 WHERE 课程号='C2'
D. SELECT 姓名 FROM S WHERE 学号=;
   (SELECT * FROM SC WHERE 课程号='C2')
答案:D
解析:A、B、C均可。D中,由于是判断学号是否是后面集合的子集,而不是和一个具体的数值做比较。所以应该像B选项一样用IN,而不是=。