MySQL-where 和 having的区别

一张表 id, name, gender, salery

在大多数情况下,where和having是可以等价使用的,比如下面的情况就是等价的:

select id,name,gender where gender=''
select id, name,gender having gender=''

或者:

select id,name,gender where id>5
select id,name,gender having id>5

但是下面的情况就会出现不同。

区别1:

select id,name,gender where salery>50这个是可以正常运行的,可是
select id,name,gender having salery>50 就会报错,因为having的字段必须再select的字段中出现

区别2:

select id as a, name as b,gender as c where a>50 这个就要报错,因为where不能直接使用别名
select id as a, name as b,gender as c having a>50 这个就可以正确查询出数据,因为having可以直接使用别名

区别3:having 后面可以跟聚合函数,where就不可以

参考:

原文地址:https://www.cnblogs.com/happyflyingpig/p/14275398.html