一张表 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就不可以
参考: