比较清单的嵌套查询的ALL关键字的用法

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:52:50
R.T.
例如:select 姓名,年龄,所属部门
from 员工数据表
where 年龄 > ALL(select AVG(年龄)
from 员工数据表
group by 所属部门)
上面是我看到的一个例子。
1.其中在子查询中应该是查询出的单个列,也就是各个部门的平均年龄,那么group by 是做什么的,应该不需要的吧;还是说ALL关键字可以类似于测试存在的嵌套查询中的exists关键字那样,可以使得主查询需要这样的条件,也就是说这里的group by实际上是作用在主查询上面得?
2.第二个问题是重要滴,就是和题目一样。ALL关键字是用于选择能够同时满足由子查询的查询结果组成的比较清单中的所有值的记录。这里面的同时满足以及所有值应该怎么去理解,可以安装我上面的例子给出详细的说明。比如说,如何让员工数据表里的年龄同时满足在子查询中查询出来的单列多行的平均年龄的呢?
上面说的所有值,我是这么理解了下。所有值的选择是不是在where语句满足的同时就从员工数据表中给取出来了啊。如果是这样的话,那就只有ALL关键字是如何去判断同时满足的情况了。

1.既然是各个部门的平均年龄,那肯定需要对部门进行分组,所以group by 所属部门 是必须的
子查询前面带all,其实这整个查询意思是查询员工数据表中所有大于各部门平均年龄的员工
2.
这么说吧,all后面的子查询是得到一列多行的数据(各个部门的平均年龄)
在where子句中,通过全表扫描,将判断每行数据的年龄字段得值与 子查询得到的多个年龄平均值进行对比,只要全部大于即满足要求,即从表中把该行数据提取出来,直到整个表都扫描一遍,这样就得到所有满足条件的记录