书写顺序
select->distinct->from->join->on->where->group by->having->order by->limit
on
使用join进行表连接的时候,on对其结果进筛选,产生临时表。
tip:必须使用join才能使用on,不能单独出现
on不能单独出现:
表结构在最下面
where
对on之后产生的临时表再进行数据过滤
未使用where之前:
使用where之后:
单独使用where:
having
where进行数据过滤之后,才进行聚合函数,而having就是对聚合函数之后再进行过滤
tip:如果没使用where可以单独使用having,如果sql语句中既使用了聚合函数和where还想要使用having,那么必须用聚合之后的列明调用(这句话看不懂,看最后的例子)
单独使用having:
单独使用where:
两者结果一样的
使用where的同时,使用having:
使用聚合函数、where的同时,使用having:
报错:Unknown column 'DEPTNO' in 'having clause'(存在未知列 “DEPTNO”)
正确写法
原因分析及结论:
1.聚合函数之后就不存在DEPTNO这个列了,所以得用聚合之后的列名。
2.where在聚合函数之前执行,having在聚合函数之后执行。
表结构:
EMP表
DEPT表: