where与having的区别

BaronZ 2012-11-14 11:04:56
各位高手,能说一下where 与 having的区别吗?
...全文
400 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2012-11-15
  • 打赏
  • 举报
回复
where 就不多说了,比较自由,但是必须先where后having,having要与group by 联用,对统计结果进行筛选。在having子句中可以使用出现在查询结果列的字段和统计函数,它对查询以及统计运算的结果再做一次筛选,输出满足having筛选的结果。不出现在输出列中但与查询有关的统计也可以在having子句中被使用。
發糞塗牆 2012-11-14
  • 打赏
  • 举报
回复
纯属个人理解和看书所得,不保证没有任何漏洞或者不足之处。
發糞塗牆 2012-11-14
  • 打赏
  • 举报
回复
ON /WHERE /HAVING是sql语句的3个筛选项,按照t-sql的查询顺序,先on在where再having(前提是用到了这些选项。如果没用到,那顺序就推后)。这里先不说on,where是在单表或者多表关联以后,筛选出符合where子句中出现的数据。也就是使得整个where子句为真的数据。having是要在group by以后才能用。而group by 是对已经通过where筛选出来的数据按照一定规则分组,生成新的临时数据集。然后做最后一次筛选,最后才select出来,最主要的两个区别其实就是:
1、顺序,先where再having
2、where几乎没什么限制条件,但是只有用了group by 才能用having,有时候单纯的where不能筛选出希望的数据,比如要先分组再做筛选,此时就要用having或者其他办法。

t-sql的执行顺序如下图:
开启时代 2012-11-14
  • 打赏
  • 举报
回复
虽同为筛选数据,但有以下不同: 1.where 是可以单独使用的,having 是必须配合group by 使用。 2.where 是先过滤数据表 ,having 是先分组 然后过滤数据表。
-Tracy-McGrady- 2012-11-14
  • 打赏
  • 举报
回复
where是过滤数据“列”,比如where sname='张三',where day='星期三',都是对一些“列”进行刷选。 having 是过滤数据“行”,比如 having count(*)>1,这里需要配合使用group by,group by之后出来一些“行”,加上having count(*)>1就去除了某些“行”的数据 当然得先where sname='' group by '' having ''这是顺序 这是我个人的理解
坚_持 2012-11-14
  • 打赏
  • 举报
回复
where 先过滤数据表,可以单独使用的, having 先分组,在过滤数据表,必须配合group by 使用
sqlkxr 2012-11-14
  • 打赏
  • 举报
回复
where 是过滤表连接构成的临时表的数据。 having 则是对分组后的结果进行过滤,分组后的数据只能出现分组条件字段和聚合函数。 所以having后可跟分组的任何一个字段,或者聚合函数表达式,或者他们的条件组合。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧