`

on、where、having 在结果包含聚合函数时的效率区分

阅读更多

on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。

根据上面的分析,可以知道where也应该比having快点的,因为它过滤数据后才进行sum,所以having是最慢的。但也不是说having没用,因为有时在步骤3还没出来都不知道那个记录才符合要求时,就要用having了。

在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢。

如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。

在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。

分享到:
评论

相关推荐

    VFP SELECT 用法大补

    4. `COUNT(*)`、`SUM()`、`AVG()`、`MAX()`、`MIN()`:聚合函数,用于统计和计算。 ### Select 子句中的通配符 通配符用于模糊匹配,如 `%` 代表任意字符序列,`_` 代表单个字符。例如,`SELECT * FROM Customers ...

    标准Sql语句的写法.pdf

    以上内容涵盖了SQL查询的基本元素,但SQL还包括更复杂的操作,如GROUP BY用于分组,HAVING用于过滤分组后的结果,ORDER BY用于排序,以及聚合函数(COUNT, SUM, AVG, MAX, MIN)等。理解并熟练掌握这些基本概念是...

    50个常用sql语句

    根据给定文件的信息,我们可以提炼出以下SQL知识点及相关示例: ### 1. 查询同时选修了课程号为 '001' 和 '002' 的学生...这些知识点覆盖了SQL语言的基本用法和高级特性,包括但不限于子查询、表连接、聚合函数等。

    SQL实例和答案

    - **HAVING子句**:用于过滤分组后的结果集,不同于`WHERE`子句,它可以对聚合函数的结果进行筛选。 ### 3. 查询所有同学的学号、姓名、选课数、总成绩 ```sql SELECT Student.S#, Student.Sname, COUNT(SC.C#), ...

    sql相关的操作

    聚合函数用于对一组数据执行计算,得到单一的结果。 1. **COUNT():** 统计符合条件的记录数量: ```sql SELECT COUNT(*) FROM students; -- 计算学生的总数 ``` 2. **AVG(列):** 计算指定列的平均值: ```sql ...

    国开电大形考作业答案-计算机专业-数据库应用与技术-第四次形考作业-实验.doc

    此处涉及多个聚合函数的组合使用。 #### 9. 统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果 ```sql SELECT Sno, COUNT(Cno) AS 选课门数, SUM(Grade) AS 总成绩 FROM SC GROUP BY Sno ORDER BY ...

    标准Sql语句的写法.docx

    7. **聚合函数**:如`COUNT()`、`SUM()`、`AVG()`、`MAX()`和`MIN()`,用于对一组值进行统计计算。 8. **分组和排序**:`GROUP BY`用于根据一个或多个列对结果集进行分组,`ORDER BY`用于指定结果集的排序方式。 9...

    常用SQL语句,常用SQL语句

    根据给定的信息,我们可以整理出一系列与SQL查询...以上就是对给定SQL语句的详细解析,这些SQL语句覆盖了常见的数据库查询操作,包括子查询、连接查询、聚合函数、分组统计等高级功能,非常适合用来学习和练习SQL语言。

    经典sql,常用的sql,学习必会的sql

    根据提供的标题、描述以及部分SQL查询内容,我们可以总结出一系列重要的SQL知识点,这些知识点...以上SQL查询覆盖了SQL语言中的一些核心概念和技术,如子查询、连接操作、聚合函数等,是学习SQL时非常重要的知识点。

    Hibernate查询语句教程a

    - **聚合函数**:如`count()`, `sum()`, `avg()`, `min()`, `max()`可以在HQL中使用。 - **子查询**:可以在HQL中嵌套查询,如`from Cat as cat where cat.id in (select dog.id from Dog as dog)`。 HQL的灵活性...

    数据库实验二复杂SQL数据操作.doc

    - 这里需要用到聚合函数`COUNT()`结合`CASE`语句来区分性别,再使用`GROUP BY`对系别进行分组统计。 - 示例命令:`INSERT INTO NewTable (Department, MaleCount, FemaleCount) SELECT Department, COUNT(CASE ...

    MySQL 第二天作业.docx

    - 利用聚合函数`MAX()`、`MIN()`和`COUNT()`来计算每个岗位上的最高薪水、最低薪水以及该岗位的员工数量。 7. **按照主管来分组,统计每个主管管理的人数以及下属的平均薪水** - **SQL语句**: ```sql SELECT ...

    2009达内SQL学习笔记

    所有的聚合函数都可以使用。如果指定列名,则DISTINCT只能用于COUNT(列名),DISTINCT不能用于COUNT(*)。 如:Select Distinct name From s_dept; Select Distinct dept_id,title From s_emp; 文本处理: TRIM()/...

    Mysql入门知识点总结-思维导图版

    在查询语句中,可以使用WHERE子句进行条件筛选,GROUP BY用于分组,HAVING用于分组后的过滤,ORDER BY用于排序,LIMIT用于分页。聚合函数,如COUNT(), SUM(), AVG(), MAX(), MIN()等,用于对一组数据进行计算。 在...

    Oracle面试题.doc

    - **HAVING子句**: 在GROUP BY之后应用,用于过滤分组后的结果,常用于带有聚合函数的查询。 **6. INSERT语句** - **基本形式**: `INSERT INTO 表名 (列1, 列2, …) VALUES (值1, 值2, …);` 用于向表中插入一行...

    Mysql入门知识总结-大纲

    可以添加`WHERE`条件、使用聚合函数(如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`)、`GROUP BY`进行分组、`HAVING`过滤分组后的结果、`ORDER BY`进行排序和`LIMIT`进行分页。例如: ```sql SELECT name, COUNT(*) FROM ...

    PLSQL基础

    - **组函数**也称作聚合函数,用于对一组行执行计算并返回单一值。 - **常用函数**: - `COUNT(column)`:计数。 - `SUM(column)`:求和。 - `AVG(column)`:平均值。 - `MIN(column)`:最小值。 - `MAX(column...

    SQL考试1

    使用 `SELECT * FROM products WHERE prod_name REGEXP 'jetpack',i` 不区分大小写地查找包含"jetpack"的产品。 12. **查看数据库版本**: `SELECT VERSION()` 可以获取MySQL服务器的版本信息。 13. **查看当前...

    SQL语法大全

    Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: ----------------------------------------------------...

    数据库教程

    - 包括聚合函数(AVG、COUNT、MAX、MIN、SUM等)和字符串函数(UCASE、LCASE、MID、LEN等),用于对数据进行各种操作。 - **SQL GROUP BY语句**: - 用于结合与某个特定标准匹配的行。 - **SQL HAVING子句**: - ...

Global site tag (gtag.js) - Google Analytics