提出这个问题很多人会觉得这太基础了..
on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案
我在想一个问题,为什么mysql官方要出三个筛选条件关键字?
即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)
why not ?
提出这个问题很多人会觉得这太基础了..
on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案
我在想一个问题,为什么mysql官方要出三个筛选条件关键字?
即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)
why not ?
有些时候,having可以替代where,但where不能替代having,where针对行级过滤,用于选择数据库中特定的行,having针对分组过滤,用于选择结果集中特定的分组(一个或多个)。。。
这样说吧,有一张表是学生科目成绩表,我们要查出学生总成绩且总成绩大于500分的学生来,这时候就要用到having了,select sum(score) as score from subjects group by user_id having score >500
既然有这个问题,那么肯定有sql基础。
sql定义了一个标准的关键字顺序,比如查询肯定第一个关键字是select;另外还有一个是执行顺序。
1.(left) join 表 on 关联条件;on决定了表和前边表的关联的条件,是标准语法
2.where 执行顺序在join on 之后后,也就是说,where条件筛选是在join完了之后,比如是left join a,你在where之后加a表条件,这个left join 效果就类似join.
3.having 这个是为减少子查询存在的条件筛选,常用于报表;比如经过统计后再次筛选
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答2k 阅读
sql是一个标准,不是mysql定义的。
当然,mysql有自己定义的部分,也有没有实现的标准。但你问的这几个确实是标准的部分。
至于为什么,抱歉我没能回答你的问题的,你可以去搜索一下英文的内容。