Lmxy1990 ' Blog

sql 中 Where与Having的区别

关于Where与having的原理

Where 的原理是根据条件去检索.
Having 是根据条件从检索到的内容中根据条件来筛选.

使用场景

能使用Where的尽量使用Where.虽然都是遍历.不过机制上来说,前置速度会快些.

但是涉及一些结果处理来筛选的时候.
例如:两列的值相减大于某个数的行.
SELECT *,(t.c1-t.c2) as tt FROM for_pan_test.new_table t having tt >0;

SELECT *,(t.c1-t.c2) as tt FROM for_pan_test.new_table t where (t.c1-t.c2) >0;

这样都可以的.但是如果出现聚合,那就必须使用having了.因为在聚合之前,是不知道该值的(SQL92 标准不支持该查询.SQL99之后支持如果出现sql_model=only_full_group_by.disable该模式 详见).

SELECT *,(sum(t.c1)-t.c2) as tt FROM for_pan_test.new_table t group by t.s1 having tt >0;

这时候使用where的结果就行了.
SELECT *,(sum(t.c1)-t.c2) as tt FROM for_pan_test.new_table t where (t.c1-t.c2) >0 group by s1;


End

坚持原创技术分享,您的支持将鼓励我继续创作!