84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
提出这个问题很多人会觉得这太基础了..on为join服务,where为物理表服务,having可以为别名服务.可惜我要的不是这样的答案我在想一个问题,为什么mysql官方要出三个筛选条件关键字?即一个关键字不能解决吗?(单独用where放在select执行前进行一次总的筛选)why not ?
认证0级讲师
sql是一个标准,不是mysql定义的。
当然,mysql有自己定义的部分,也有没有实现的标准。但你问的这几个确实是标准的部分。
至于为什么,抱歉我没能回答你的问题的,你可以去搜索一下英文的内容。
有些时候,having可以替代where,但where不能替代having,where针对行级过滤,用于选择数据库中特定的行,having针对分组过滤,用于选择结果集中特定的分组(一个或多个)。。。
这样说吧,有一张表是学生科目成绩表,我们要查出学生总成绩且总成绩大于500分的学生来,这时候就要用到having了,select sum(score) as score from subjects group by user_id having score >500
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 这个是为减少子查询存在的条件筛选,常用于报表;比如经过统计后再次筛选
楼主好问题, 我也这么觉得从语义上来说。join后面加 join条件 条件可以用where吧。当分组后要筛选,where也符合语义,为什么要用having。可能是为了区分吧。
sql是一个标准,不是mysql定义的。
当然,mysql有自己定义的部分,也有没有实现的标准。但你问的这几个确实是标准的部分。
至于为什么,抱歉我没能回答你的问题的,你可以去搜索一下英文的内容。
有些时候,having可以替代where,但where不能替代having,where针对行级过滤,用于选择数据库中特定的行,having针对分组过滤,用于选择结果集中特定的分组(一个或多个)。。。
这样说吧,有一张表是学生科目成绩表,我们要查出学生总成绩且总成绩大于500分的学生来,这时候就要用到having了,select sum(score) as score from subjects group by user_id having score >500
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 这个是为减少子查询存在的条件筛选,常用于报表;比如经过统计后再次筛选
楼主好问题, 我也这么觉得从语义上来说。
join后面加 join条件 条件可以用where吧。
当分组后要筛选,where也符合语义,为什么要用having。
可能是为了区分吧。