検索

ホームページ  >  に質問  >  本文

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

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

PHP中文网PHP中文网2785日前649

全員に返信(7)返信します

  • PHP中文网

    PHP中文网2017-04-17 14:01:07

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

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

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:01:07

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

    返事
    0
  • 阿神

    阿神2017-04-17 14:01:07

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:01:07

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

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 14:01:07

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:01:07

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

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

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

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

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

    返事
    0
  • 迷茫

    迷茫2017-04-17 14:01:07

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

    返事
    0
  • キャンセル返事