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

1.       ON 和WHERE

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

由于以上原因,ON和WHERE的差别主要有下:

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

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

2.       HAVING和WHERE

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

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

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

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

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

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

3.       总结

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

ON、WHERE、HAVING的差别的更多相关文章

  1. ROLAP和MOLAP的概念和差别

    ROLAP和MOLAP的概念和差别OLAP(on-Line Analysis Processing)是使分析人员.管理人员或执行人员能够从多角度对信息进行快速.一致.交互地存取,从而获得对数据的更深入 ...

  2. apt-get upgarde和dist-upgrade的差别

    apt-get upgarde和dist-upgrade的差别 apt-get upgarde和dist-upgrade的差别   Debian/Ubuntu Linux都使用apt,升级时都是:  ...

  3. python与ruby的差别

    1.引用文件差别 Ruby:同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件.如果直接在foo.rb中 require 'bar' ...

  4. 【转】responseText,responseBody,responseXML差别

    为了做ajax的代理,研究了下服务器端的xmlhttp和客户端ajax中的xmlhttp,做了个比较 由于我一直使用JavaScript作为Asp的教本语言,所以比较起来更清楚.服务器端的xmlhtt ...

  5. 我的ORM之十二 -- 支持的数据库及差别

    我的ORM索引 支持最好的是SqlServer2005,Sqlserver2008,SqlServer2012 ,后续将支持:MySql,Sqlite,Oracle. 1.分页差别 MsSql 200 ...

  6. save与persist差别

    唯一差别: 在没提交事务情况下 save会产生insert语句,然后因为没提交事务进行回滚. 而这种情况,persist是连insert语句都不会产生.

  7. VS 2008 生成操作中各个选项的差别

    近日,在编译C#项目时经常发现有些时候明明代码没错,但就是编译不过,只有选择重新编译或者清理再编译才会不出错,本着求学的态度,搜罗了下VS2008IDE中生成操作的种类以及差别,整理如下:   内容( ...

  8. Angular 1与 Angular 2之间的一些差别

    现在在用ng1.5.8做一个项目,ng的优点和特性我就不用多说了,ng1在陆续更新到1.5/1.6后就没再推出新版本了,ng2已经面世测试很久了,如同很多系统和框架一样,每个大的版本更新都会有新特性加 ...

  9. PC互联网和移动互联网的本质差别

    网一代,我们先称为PC互联网,这大约可以从2010年作为分界,然后就是基于手机,及可穿戴的移动互联网. 在PC时代,软件都很庞大复杂,甚至客端端和网页混合,比如常见的桌面软件,Office及Photo ...

  10. MyBatis mapper文件中的变量引用方式#{}与${}的差别

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...

随机推荐

  1. iPhone5C三大看点:性能不输iPhone5 或售3399元

    乐杨俊编辑修改转载: iPhone 5C的发售时间或最早在9月18日,抢在中秋节前:最迟至国庆十一假期期间. [IT商业新闻网综合讯](记者 林涛)苹果2013年秋季发布会还有几个小时即将开幕,除了i ...

  2. Codeforces Round #277 (Div. 2) 题解

    Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...

  3. 8天玩转并行开发——第三天 plinq的使用

    原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...

  4. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  5. eclipse之The currrently displayed page contains invalid values错误

    现象: eclipse的preferences里面须要保存密码,保存报错Could Not Accept ChangesThe currrently displayed page contains i ...

  6. AFNetwork学习(二)——GET/POST请求

    为了学习AFNetwork,自己搭建整理了一下AFNetwork向后台发送请求和后台返回json数据的整个处理过程.利用Struts2搭建了一个后台,提供Action并返回json数据 环境:Xcod ...

  7. 基于visual Studio2013解决面试题之0401非递归遍历二叉树

     题目

  8. winform实现listview中combox

    一.概要 因为要在项目中要在ListView中实现下拉框选择,用DataGrid的话,一个不美观,二个绑定数据麻烦,参考网上一种做法,就是单击ListView时,判断单击的区域,然后将Combox控件 ...

  9. 网络数据(socket)传输总结

    环境限定:TCP/IP下的socket网络传输:C/C++开发语言,32/64位机. 目前有两种方式对数据进行传输:1)字符流形式,即将数据用字符串表示:2)结构型方式,即将数据按类型直接传输. 1) ...

  10. IIS部署asp.net报404错误

    1).所建网站->(右键)权限->"ASP.NET计算机帐户"是否已添加.     2).所建网站->(右键)属性->ASP.NET选项卡->版本是否 ...