`

sql中的having和where的作用

    博客分类:
  • SQL
sql 
阅读更多
例子:
  select max(orgid) from auditresults where warningrulesid=100000021 having orgid>=100000737 group by orgid;
 
  select max(orgid) from auditresults where warningrulesid=100000021 group by orgid having  orgid>=100000737;

这两句sql,初看结果集是一模一样的。但是第一句在例子中比第二句快很多
一:
where是对所有数据表的所有行起作用,即对某一个表的所有行进行条件匹配过滤,是行级概念。having是对数据分组起作用,它对group by之后的某一组类型数据进行筛选,即过滤数据组,针对的是一个集合对象。一般来说用where速度相对较快。
但是having是相对于聚合查询,根据聚合后的数据集合中去排除的,在一定的业务下,还是要用到having的

二:一般使用下,我们通常把having 放在group by之后的,这仿佛是一个惯例,也符合了having与生俱来的作用。但是当我们把having放在group by之前呢,having还是像他定义的那样运行吗?

  再看两句sql:
  select max(orgid) from auditresults having orgid>=100000737 group by orgid order by orgid;
 
  select max(orgid) from auditresults group by orgid having  orgid>=100000737 order by orgid;

这个时候,第二句又比第一句快很多了。排序还是一样的。


看来having的使用还是要根据不同的情况了,在聚合时若非必须用到,就用where代替,毕竟行级的查询还是要比集合的筛选快一些的,having最好还是按照定义的那样去用,放在group by 后面去筛选。
分享到:
评论

相关推荐

    sql中where和having 区别

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

    where和having区别

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

    SQL_HAVING_使用详解

    为了编写高效的 SQL 查询,了解 `WHERE`、`GROUP BY` 和 `HAVING` 子句的正确使用顺序至关重要: 1. **WHERE 子句**:用于筛选原始数据,尽可能地在分组之前减少数据量。 2. **GROUP BY 子句**:用于基于指定列对...

    sql/having用法

    SQL中的HAVING子句用法 HAVING子句是SQL中的一种子句,用于对 GROUP BY 子句所确定的行组进行控制。HAVING 子句条件中只允许涉及常量、聚组函数或 GROUP BY 子句中的列。在 Oracle 中,HAVING 子句是对 GROUP BY ...

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

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

    SQL中Having与Where的区别

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

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

    通过以上详细的介绍,我们可以看到`WHERE`与`HAVING`子句在SQL查询中的不同作用以及在ThinkPHP框架中如何利用`create()`等方法有效地管理数据的创建和验证过程。这对于提高应用程序的数据安全性和性能有着至关重要的...

    where和having的区别

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

    SQL中Having与Where的区别及注意

    总之,`WHERE`和`HAVING`在SQL中各有其独特的作用,`WHERE`主要处理原始数据行,而`HAVING`则针对分组后的数据进行筛选。了解它们的正确使用方式能够帮助我们编写更精确、更高效的SQL查询。在实际操作中,根据不同的...

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

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

    having语句的用法

    在SQL查询中,`HAVING`子句是用来在分组后的数据上设置过滤条件的,而`WHERE`子句则是在数据分组之前对原始数据进行筛选。这两者虽然都是用于限定查询结果,但作用的对象和时机不同。 首先,`WHERE`子句是SQL查询的...

    SQL 中having 和where的区别分析

    在SQL查询中,`WHERE`和`HAVING`子句都是用来过滤数据的,但它们在功能和使用场景上有着显著的区别。理解这两者之间的差异对于编写高效的SQL语句至关重要。 首先,`WHERE`子句主要用于在数据进行任何处理(如分组、...

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

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

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

    SQL语言是关系数据库的标准语言,它的...总的来说,WHERE子句和HAVING子句是SQL查询中的关键元素,它们分别在数据筛选和聚合结果过滤中发挥重要作用,理解并熟练运用这两个子句对于高效地操作和分析数据库至关重要。

    SQL问题详解之_having_Group by

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

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

    在SQL查询中,`WHERE`子句和`HAVING`子句都是用来过滤数据的,但它们的应用场景和功能有所不同。`WHERE`子句主要用于在数据分组之前筛选单个行,而`HAVING`子句则是在数据经过`GROUP BY`分组后对分组结果进行筛选。 ...

    sql where 和 having的区别

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

    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