还有这个选项为啥选择B
any 是任意一个,all 是所有
any表示有任何一个满足就返回true,all表示全部都满足才返回true
1、使用max和min更加直观
比如:select * from student where 班级=’01’ and age > all (select age from student where 班级=’02’);
就是说,查询出01班中,年龄大于 02班所有人的同学
相当于select * from student where 班级=’01’ and age > (select max(age) from student where 班级=’02’);
而select * from student where 班级=’01’ and age > any (select age from student where 班级=’02’);
就是说,查询出01班中,年龄大于 02班任意一个 的 同学
相当于select * from student where 班级=’01’ and age > (select min(age) from student where 班级=’02’);
2、'005,'这里面有个逗号,考虑表结构,所以插入该条数据不能执行。
A的子查询返回的是多条记录,>=适用于单个值的比较。
第二题选择的是不能执行的,需要考虑表结构,005后面有个逗号。
问最高的,那肯定跟in和not in是无关的,所以BC是错的
而AD的区别就在一个ALL上,你想想ALL是干什么的,如果不加会怎么样
第一题A的子查询返回多条记录,肯定不能直接用>=直接比较,直接比较会报类似的错误:“Subquery returns more than 1 row”
‘>=’ 后面跟all,字面意思就是大于等于后面这个集合里的所有值,等效于大于等于其中的最高值,因为是在自己本身集合里找,最高值只可能有一个值(但是这个最高值可能有多条记录)也就等效于查出最高值。
第二题你没有截人家给的数据库表里的数据的截图,B选项里的'005,' 如果不是勘误的话,应该是'005',我猜测职工表里已经存在职工号为'005'的职工,因为其是主键必须非空且唯一,所以不能插入这条记录。