我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL中Where与Having的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL中Where与Having的区别

“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。

“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

 

 

 

在说区别之前,得先介绍GROUP BY这个子句,而在说GROUP子句前,又得先说说“聚合函数”——SQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

如:
SELECT SUM(population) FROM vv_t_bbc ;
 
  这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
 
   而通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时,只有属于同一个region(地区)的一组数据才将返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

   下面再说说“HAVING”和“WHERE”:
  HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选。

  让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句:

  SQL实例:

  一、显示每个地区的总人口数和总面积:

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

  先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

  二、显示每个地区的总人口数和总面积.仅显示那些人口数量超过1000000的地区。

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(population)>1000000

[注]  在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

  相反,HAVING子句可以让我们筛选成组后的各组数据.

ps:如果想根据sum后的字段进行排序可以在后面加上:order by sum(population) desc/asc


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL中Where与Having的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql中having和where的区别

在 sql 中,having 和 where 都用于过滤数据,但它们的区别在于:where 过滤单个行,而 having 过滤聚合函数的结果。where 在 from 子句之后使用,而 having 在 group by 子句之后使用。wh
sql中having和where的区别
2024-05-07

sql中where和having的区别

where 和 having 子句在 sql 中均用于过滤数据,但作用范围不同:where 子句过滤单行,having 子句过滤分组后的结果集。where 子句在分组前应用,影响聚合函数的结果行;having 子句在分组后应用,影响分组行而
sql中where和having的区别
2024-05-01

where和having区别:

where和having区别:having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。where肯定在group by 之前,即也在having之前。where后的条件表达式里不允许使用聚合函数,而having可
where和having区别:
2014-09-23

oracle中having和where区别

having 和 where 子句的区别在于:having 用于过滤聚合结果(即分组后的数据),而 where 用于过滤基本表或视图中的行。此外,having 要求数据已分组,而 where 不需要分组。Oracle 中 HAVING 和
oracle中having和where区别
2024-04-30

oracle中where和having的区别

where 和 having 子句的区别在于作用范围:where 过滤基础行,having 过滤分组结果集。where 用于单个行条件,having 用于组结果条件。where 在 from 后 select 前,having 在 grou
oracle中where和having的区别
2024-05-03

mysql中where和having的区别

where 子句过滤行,应用于分组前;having 子句过滤组,应用于分组后且可使用组聚合函数的结果。WHERE 与 HAVING 子句的区别在 MySQL 中,WHERE 和 HAVING 子句都用于过滤数据集,但它们在作用范围和使用方
mysql中where和having的区别
2024-05-02

Mysql中where与having的区别实例详解

以一道题来做引子牛客,SQL30 计算总和OrderItems表代表订单信息,包括字段:订单号order_num和item_price商品售出价格、quantity商品数量。order_numitem_pricequantitya11
2023-01-09

sql中having和where的用法

where 子句在 select 语句中筛选行,根据行条件过滤基础数据。having 子句在 group by 语句中筛选组,根据组的聚合结果过滤组。主要区别:where 处理单个行,评估行的条件;having 处理组,评估组的聚合结果;w
sql中having和where的用法
2024-05-02

编程热搜

目录