首页 > Mysql语句,on,where,having..区别

Mysql语句,on,where,having..区别

提出这个问题很多人会觉得这太基础了..
on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案
我在想一个问题,为什么mysql官方要出三个筛选条件关键字?
即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)
why not ?


楼主好问题, 我也这么觉得从语义上来说。
join后面加 join条件 条件可以用where吧。
当分组后要筛选,where也符合语义,为什么要用having。
可能是为了区分吧。


SQL语法是有标准的,mysql肯定要遵守基本的标准,而且这三个关键字有不同的语义:
ON, 定义表连接的条件
WHERE,定义表行记录的过滤条件
HAVING,定义分组的的过滤条件


我自然是知道的。
那也就只能用sql语句标准解释这个问题了


既然有这个问题,那么肯定有sql基础。

sql定义了一个标准的关键字顺序,比如查询肯定第一个关键字是select;另外还有一个是执行顺序。

1.(left) join 表 on 关联条件;on决定了表和前边表的关联的条件,是标准语法

2.where 执行顺序在join on 之后后,也就是说,where条件筛选是在join完了之后,比如是left join a,你在where之后加a表条件,这个left join 效果就类似join.

3.having 这个是为减少子查询存在的条件筛选,常用于报表;比如经过统计后再次筛选


sql是一个标准,不是mysql定义的。

当然,mysql有自己定义的部分,也有没有实现的标准。但你问的这几个确实是标准的部分。

至于为什么,抱歉我没能回答你的问题的,你可以去搜索一下英文的内容。


这样说吧,有一张表是学生科目成绩表,我们要查出学生总成绩且总成绩大于500分的学生来,这时候就要用到having了,select sum(score) as score from subjects group by user_id having score >500


有些时候,having可以替代where,但where不能替代having,where针对行级过滤,用于选择数据库中特定的行,having针对分组过滤,用于选择结果集中特定的分组(一个或多个)。。。

【热门文章】
【热门文章】