首页 > MySQL > Mysql where vs having
2010六月11

Mysql where vs having

在写SQL语句的时候,用的最多的条件子句就是”where”,而”having”也是条件子句。

二者相似,却也有不同。让我们简单了解一下。

where和having的区别是where子句对一个表的所有记录进行操作,只搜索与指定条件相匹配的记录。

而having子句只对经过操作的表记录进行检索,对结果集进行更进一步的筛选。

通常,having子句和group by子句相连,而where子句和select,delete和update语句相连。

where vs having 处理内容

首先,让我们看如下两个例子,结果还是很有意思的。

这两个图可以说明如下事情:

  1. 在一些简单查询上,having与where子句很像
  2. having是在结果集里执行条件,如果结果集里没有要查询条件的字段存在则报错,而where则不然

where vs having 聚合函数

当我们在sql语句里使用了聚合函数时(啥子是聚合函数?),having与where的表现也不同。

根据上一条的记录,如果返回的结果集里没有having子句的查询字段存在,sql会报错

根据上面的结果你可能会对having感到失望,别着急,经典的来了。

这是因为where子句的条件执行是在聚合函数执行前就执行了,这时还没有cnt字段生成呢。而having子句的执行是在聚合函数后执行的(处理结果的嘛),所以可行。

Goog good study, day day up!

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2010/06/11/1770/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

3 Responses to “Mysql where vs having”

  1. #1 丕子 回复 | 引用 Post:2010-06-12 09:54

    哇哦 好久没有研究SQL了

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2010-06-12 09:56

    @丕子
    呵呵。我也好久没有写关于MySQL的日志了。

    [回复]

  3. #3 小风 回复 | 引用 Post:2011-04-22 11:41

    谢谢,很实用,也真的很管用。谢谢了 :-P

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)