zoukankan      html  css  js  c++  java
  • having和where的区别

    where关键字的作用是过滤,在分组前选取符合条件的记录,放在group by之前;

    having关键字的作用是筛选满足条件的组,即在分组之后过滤数据,放在group by之后。

    但是,在某些条件下,使用这两者可以得到一样的结果。如下例子:

    1.
    SELECT BoxType,COUNT(1) FROM BoxType 
    GROUP BY BoxType 
    HAVING BoxType='行李箱'; 2. SELECT BoxType,COUNT(1) FROM BoxType WHERE BoxType='行李' GROUP BY BoxType;

    那么他们两者的区别在哪呢?

    首先,Where 子句是用来指定 "行" 的条件的,而Having 子句是指定 “组” 的条件的,即

    Where 子句 = 指定行所对应的条件

    Having 子句 = 指定组所对应的条件

    因此,2 语句会比较合适。

    其次,当在Where子句和Having子句中都可以使用的条件,从语句的执行效率来看,最好写在Where子句中。

    因为在使用Count函数等对表中的数据进行聚合操作时,DBMS内部会进行排序处理,而排序操作会增加机器的负担,减少排序的行数,可以增加处理速度使用Where子句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。但是Having子句是在排序之后才对数据进行分组的,因此与前者相比,需要排序的数据量就要多得多。

    第三,使用Where子句更具速度优势的另一个理由是,可以对Where子句指定条件所对应的列创建索引,这样可以大幅提高处理速度。

    第四,Where子句中不能使用聚合函数,而Having子句中可以。

  • 相关阅读:
    a Makefile
    Fedora的一些个人配置
    开机默认命令行
    挂载iso文件
    Vi不显示insert
    beego 框架基本使用 && 知识点整理
    kafka的安装及使用(单节点)
    Go 实现短 url 项目
    晓看天色暮看云,铁马冰河入梦来
    Go net/http,web server
  • 原文地址:https://www.cnblogs.com/damoblog/p/8652840.html
Copyright © 2011-2022 走看看