where与having的区别

heshaohua 2006-10-20 04:23:40
where与having的区别
...全文
7279 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
heshaohua 2006-10-21
  • 打赏
  • 举报
回复
谢谢!!!明白了,帮助以后不用再贴了,就是看不懂帮助才来问得!!!
Well 2006-10-20
  • 打赏
  • 举报
回复
having是筛选group by 分组之后的语句
where 是查询时用的筛选
jesons 2006-10-20
  • 打赏
  • 举报
回复
可以打分了
marco08 2006-10-20
  • 打赏
  • 举报
回复
where 用在 from 後

having 用在 group by 後
splory 2006-10-20
  • 打赏
  • 举报
回复
指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。通常在 GROUP BY 子句中使用它。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样
i9988 2006-10-20
  • 打赏
  • 举报
回复
说不清楚,还是铁点帮助吧

在同一查询中使用 HAVING 子句和 WHERE 子句
在某些情况下,在对作为一个整体的组应用条件之前(使用 HAVING 子句),可能需要从组中排除个别的行(使用 WHERE 子句)。

HAVING 子句与 WHERE 子句类似,但只应用于作为一个整体的组(即应用于在结果集中表示组的行),而 WHERE 子句应用于个别的行。查询可同时包含 WHERE 子句和 HAVING 子句。在这种情况下:

首先将 WHERE 子句应用于表中的个别行或关系图网格中的表结构化对象。只对符合 WHERE 子句条件的行进行分组。


然后将 HAVING 子句应用于由分组生成的结果集中的行。只有符合 HAVING 子句条件的组才出现在查询输出中。只能将 HAVING 子句应用于也出现在 GROUP BY 子句或聚合函数中的列。
例如,假设联接 titles 和 publishers 表以创建一个查询,显示一组出版商出版的书的平均价格。只想看到一组特定出版商(可能只是加利福尼亚州 (CA) 的出版商)出版的书的平均价格。甚至只想看到超过 10.00 美元的平均价格。

在计算平均价格前,可以包含 WHERE 子句以建立第一个条件,该条件将放弃不在加利福尼亚州 (CA) 的出版商。第二个条件需要 HAVING 子句,因为该条件基于数据的分组和汇总结果。所得到的 SQL 语句可能象下面这样:

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10
可在查询设计器的网格窗格中创建 HAVING 和 WHERE 子句。默认情况下,如果为列指定了搜索条件,该条件就成为 HAVING 子句的一部分。但可以将条件改为 WHERE 子句。

可以创建包含同一列的 WHERE 子句和 HAVING 子句。为此,必须将该列向网格窗格中添加两次,然后将一个实例指定为 HAVING 子句的一部分,将另一个实例指定为 WHERE 子句的一部分。

在聚合查询中指定 WHERE 条件

为查询指定组。有关详细信息,请参见对查询结果中的行分组。


如果网格窗格中还没有 WHERE 条件所基于的列,请添加该列。


清除"输出"列,除非数据列是 GROUP BY 子句的一部分或包含在聚合函数中。


在"准则"列中指定 WHERE 条件。查询设计器将该条件添加到 SQL 语句的 HAVING 子句中。
注意 该过程示例中所显示的查询联接两个表:titles 和 publishers。

在此时的查询中,SQL 语句中包含 HAVING 子句:

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
GROUP BY titles.pub_id
HAVING publishers.state = 'CA'
在"分组"列中,从分组和汇总选项列表中选择"Where"。查询设计器将该条件从 SQL 语句的 HAVING 子句中删除并将其添加到 WHERE 子句中。
SQL 语句改为包含 WHERE 子句:

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
stou 2006-10-20
  • 打赏
  • 举报
回复
就樓上的吧.
中国风 2006-10-20
  • 打赏
  • 举报
回复
用having 需要用 group by
如:
declare @a table(num int, num1 int)
insert @a
select 1,50 union all
select 1,60 union all
select 2,70 union all
select 3 ,80 union all
select 4 ,90
select * from @a where num1>70 --用于条件

select num,sum(num1) from @a group by num
having sum(num1)>70--用于聚合函数

(所影响的行数为 5 行)

num num1
----------- -----------
3 80
4 90

(所影响的行数为 2 行)

num
----------- -----------
1 110
3 80
4 90

(所影响的行数为 3 行)

i9988 2006-10-20
  • 打赏
  • 举报
回复
having必须group by
having可以用聚合函数,如having sum(qty)>1000

allright_flash 2006-10-20
  • 打赏
  • 举报
回复
having一般跟在group by 之后,执行记录组选择的一部分来工作的。
where 则是执行所有数据来工作的。

34,697

社区成员

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

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