ON、WHERE、HAVING的差别

ON、WHERE、HAVING的差别

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

           ON 、WHEREHAVING都能通过限制条件筛选数据,但他们的使用及其不同。以下我们来分析三者之间的差别。

1.       ON 和WHERE

        全部的查询都回产生一个中间暂时报表,查询结果就是从返回暂时报表中得到。ONWHERE后面所跟限制条件的差别,主要与限制条件起作用的时机有关,ON依据限制条件对数据库记录进行过滤,然后生产暂时表;而WHERE是在暂时表生产之后,依据限制条件从暂时表中筛选结果。

           由于以上原因,ONWHERE的差别主要有下:

1)  返回结果:在左外(右外)连接中,ON会返回左表(右表)中的全部记录;而WHERE中,此时相当于inner join,仅仅会返回满足条件的记录(由于是从暂时表中筛选,会过滤掉不满足条件的)。

2)  速度:由于ON限制条件发生时间较早,暂时表的数据集要小,因此ON的性能要优于WHERE

2.       HAVING和WHERE

          HAVINGWHERE的差别也是与限制条件起作用时机有关,HAVING是在聚集函数计算结果出来之后筛选结果,查询结果仅仅返回符合条件的分组,HAVING不能单独出现,仅仅能出如今GROUP BY子句中。;而WHERE是在计算之前筛选结果,假设聚集函数使用WHERE,那么聚集函数仅仅计算满足WHERE子句限制条件的数据,比如:

     SELECT COUNT(id) FROM db_equip WHERE tb_equip_type = ‘2’;

           Count计算的结果是首先筛选设备类型为2的的设备,然后统计设备类型为2类型的数量。

       在使用和功能上,HAVINGWHERE有下面差别:

1)  HAVING不能单独出现,仅仅能出如今GROUP BY子句之中;WHERE即能够和SELECT等其它子句搭配使用,也能够和GROUP BY子句搭配使用,WHERE的优先级要高于聚合函数高于HAVING

2)  由于WHERE在聚集函数之前筛选数据,HAVING在计算之后筛选分组,因此WHERE的查询速度要比HAVING的查询速度快。

3.       总结

        ON、WHERE、HAVING的主要区别是其子句中限制条件起作用时机引起的,ON是在生产暂时表之前依据条件筛选记录,WHERE是从生产的暂时表中筛选数据,而HAVING是对暂时表中满足条件的数据,进行计算分组之后,通过HAVING限制语句筛选分组,返回结果是满足HAVING子句限制的分组。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118060.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • QStringList 使用

    QStringList 使用创建QStringList获取QStringList里面的元素QStringListstrList=item.split(‘#’);QStringstr1=strList.at(0);QStringstr2=strList.at(1);

  • 时序数据库Machbase「建议收藏」

    时序数据库Machbase「建议收藏」Background最近偶然接触到Machbase,发现相关信息很少,于是自己做了一些简单的了解,这里记录下,方便有兴趣的童靴参考哈。1、官方介绍Machbase是韩国的一家公司开发的一款类似InfluxDB、DolphinDB、TDengine等时序数据库产品,不开源,不过单机fog版可以免费试用,具体可以参考官方网站:https://www.machbase.com/product/edge;但是国外的网站访问不便,这里给个下载的链接,想试用的可以下载:下载链接:https://pan.

  • Java中遍历Set集合的三种方法「建议收藏」

    Java中遍历Set集合的三种方法「建议收藏」1.迭代遍历:Setset=newHashSet();Iteratorit=set.iterator();while(it.hasNext()){Stringstr=it.next();System.out.println(str);}2.for循环遍历:for(Stringstr:set){System.out.println(str);}…

  • AutoEventWireup指令分析

    AutoEventWireup指令分析指令:指定当页和用户控件编译器处理ASP.NETWeb窗体页(.aspx)和用户控件(.ascx)文件时所使用的设置。在编译时发生作用,有些是如在asp.net2.0中将 后产生       protectedoverrideboolSupportAutoEvents{           get{               returnfalse; 

  • 易语言学习(基础入门)

    易语言学习(基础入门)

    2022年10月28日
  • java flowable工作流_flowable工作流免费视频

    java flowable工作流_flowable工作流免费视频1.2基本操作1.2.1编码准备这里一官网请假流程案例为例resources目录下新建一个holiday-request.bpmn20.xml文件1.2.2初始化DB运行脚本后会初始化相关表,后面一点点介绍查看act_re_deployment表查看act_ge_bytearray,记录xml文本字节数组,通过deployment_id关联,查看相关的api有列表查询、分页查询等1.2.4发起流程修改holiday-request.bpmn2

    2022年10月27日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号