-
作用时间:
- Where 通常在查询开始时执行,用于过滤数据行的访问权限。它是约束声明,确保只有满足特定条件的记录被选入结果集。
- Having 则在查询完成并返回结果集之后执行,用于进一步筛选已分组的结果集。它是过滤声明,允许使用聚合函数来处理每个组的数据。
-
聚合函数的使用:
- Where 中的查询条件不允许使用聚合函数,因为它需要在数据分组之前进行过滤。
- Having 中可以使用聚合函数,因为它是在数据分组完成后进行筛选操作的。
-
与 GROUP BY 的关系:
- Where 通常与 GROUP BY 一起使用,以确定哪些记录属于特定的分组。
- Having 可以独立于 GROUP BY 使用,但通常会与其结合,以便在分组的基础上进行额外的筛选。
-
查询结果的可见性:
- Where 中的查询条件决定了哪些记录可以被访问或显示。
- Having 中的过滤条件则决定了哪些分组的结果会被访问或显示。
-
查询条件的可见性:
- Where 中的查询条件可以是基于表的字段,也可以是基于视图的信息。
- Having 中的查询条件仅限于查询结果中的列,用于筛选这些列上的数据。
综上所述,Where 主要用于在查询开始时就过滤掉不符合条件的记录,而 Having 则用于在查询结果生成后再对这些结果进行更细致的筛选。两者在执行顺序上有明显的差异,Where 在 GROUP BY 之前执行,而 Having 在 GROUP BY 之后执行
作者本人总结:where在计算之前执行,无法执行计算结果,having在计算之后执行,并执行计算结果