`
二当家的
  • 浏览: 25732 次
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    sql中where和having 区别

    在SQL查询中,`WHERE`和`HAVING`子句都是用于过滤数据,但它们的应用场景和作用方式有所不同。理解这两个子句的区别对于编写高效的SQL语句至关重要。 首先,`WHERE`子句主要应用于筛选单个或多个字段满足特定条件的...

    基于TP框架SQL之where与having区别

    ### 基于TP框架SQL之where与having区别的详细解析 #### 一、Where与Having的区别 在SQL查询语句中,`WHERE`和`HAVING`子句都用于过滤查询结果,但它们的应用场景有所不同。 - **WHERE子句**: - 作用:在对查询...

    where和having区别

    ### SQL中的WHERE与HAVING的区别 在SQL查询语句中,`WHERE`子句和`HAVING`子句都是用于过滤数据的,但它们的作用范围和使用场景有所不同。理解这两个子句之间的区别对于编写高效、准确的SQL查询非常重要。 #### ...

    T-SQL中where子句与having子句的对比分析.pdf

    T-SQL 中 where 子句与 having 子句的对比分析 T-SQL 中的 SELECT 语句是数据库应用最广泛和最重要的语句之一。在 SELECT 语句中,WHERE 子句和 HAVING 子句都是用来对数据进行筛选的,但是它们之间存在着一些区别...

    SQL中where子句与having子句的区别小结

    总结来说,`WHERE`子句和`HAVING`子句在SQL查询中的主要区别在于: 1. `WHERE`作用于数据分组前,适用于单行数据的筛选。 2. `HAVING`作用于数据分组后,适用于对分组后的数据进行筛选。 3. `WHERE`不支持聚合函数,...

    where和having的区别

    ### Oracle SQL 中 WHERE 和 HAVING 的区别 在数据库查询语言SQL中,`WHERE`和`HAVING`子句都是用于过滤数据的关键字,但它们的应用场景和语法结构有着明显的不同。下面将详细介绍这两个关键字的区别。 #### 1. ...

    详析SQL语言的WHERE子句与HAVING子句.pdf

    本文将深入探讨SQL中的WHERE子句和HAVING子句,这两种子句在查询语句中扮演着重要角色。 WHERE子句是SQL查询语句的基础部分,用于在检索数据时设定条件。它在SELECT语句中使用,对查询结果进行筛选,只返回满足特定...

    SQL_HAVING_使用详解

    #### 二、HAVING 子句与 WHERE 子句的区别 - **WHERE 子句**:用于在数据分组之前对数据进行过滤,它只能包含非聚合表达式。 - **GROUP BY 子句**:用于根据一个或多个列将结果集分组。 - **HAVING 子句**:用于在...

    SQL中Having与Where的区别

    在SQL查询中,`WHERE`和`HAVING`都是用于过滤数据的关键字,但它们的使用场景和功能有所不同。理解两者的区别对于编写高效的SQL语句至关重要。 首先,`WHERE`子句主要用于在数据被分组之前筛选记录。这意味着它在...

    sql/having用法

    如果一个`SELECT`语句中同时包含`WHERE`子句和`HAVING`子句,那么`WHERE`子句会在数据分组之前进行筛选,而`HAVING`子句则会在数据分组之后进行筛选。这种使用方式可以让查询更加灵活。 在实际应用中,`HAVING`子句...

    sql where 和 having的区别

    “Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”; “Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回...

    SQL问题详解之_having_Group by

    在SQL查询中,GROUP BY和HAVING子句是数据分析和聚合操作的核心部分,它们帮助我们对数据进行分组和过滤,以获得更有意义的结果。在深入理解这两个子句之前,我们首先需要了解聚合函数,如SUM、COUNT、MAX和AVG等。 ...

    having语句的用法

    总之,`HAVING`子句是SQL中用于处理分组数据过滤的关键工具,它与`WHERE`子句协同工作,共同帮助我们获取满足特定需求的数据集。在编写复杂的SQL查询时,正确理解和使用这两个子句是非常重要的。

    数据库SQL中having和where的用法区别

    在SQL查询中,`WHERE` 和 `HAVING` 都是用来过滤数据的子句,但它们的应用场景和功能有所不同。首先,我们需要了解`WHERE`子句的基本用法。`WHERE`子句用于在数据检索之前对原始记录进行筛选,它不支持聚合函数,即...

    SQL中Having与Where的区别及注意

    在SQL查询中,`WHERE` 和 `HAVING` 子句都是用来过滤数据的重要工具,但它们在使用场景和功能上有所不同。理解这两者之间的差异对于编写高效的SQL语句至关重要。 首先,`WHERE` 子句是SQL中最基础的过滤条件,它...

    sql语句中where和having的区别

    在SQL查询中,`WHERE`和`HAVING`子句都是用来过滤数据的,但它们在数据处理流程中所处的位置以及应用场景有所不同。理解这两者的区别对于编写有效的SQL语句至关重要。 首先,`WHERE`子句是标准的SQL查询部分,它在...

    sql中的 where 、group by 和 having 用法解析

    在SQL查询中,`WHERE`、`GROUP BY`和`HAVING`子句都是用于数据筛选和分组的重要部分,但它们各自承担不同的任务。理解它们的用法对于编写有效的SQL查询至关重要。 首先,`WHERE`子句是SQL查询中最基本的过滤条件,...

    SQL 语法 SQL 总结 SQL教程

    SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL Inner Join SQL Left Join SQL Right ...

Global site tag (gtag.js) - Google Analytics