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子句限制的分组

最新文章

  1. java创建文件和目录
  2. php课程---练习连接数据库及增删改
  3. Zerojudge解题经验交流
  4. [转]UIApplicationDelegate分析小结
  5. 关于MySQL回滚机制
  6. 线性时间常数空间找到数组中数目超过n/5的所有元素
  7. python 基础——常用功能片段
  8. [转载]css hack
  9. PHP常用魔术方法(__call魔术方法:)
  10. php_公共方法01_传入数组_打印可见信息
  11. 欧拉函数之HDU1286找新朋友
  12. SSH远程连接时间设置
  13. 树形插件zTree与组织插件jOrgChart交互
  14. Vant-Weapp小程序+商城案例
  15. jquery花式图片库——jqFancyTransitions
  16. ASP.Net:Javascript 通过PageMethods 调用后端WebMethod方法 + 多线程数据处理 示例
  17. 从一组数找第K大元素
  18. 内链接、左右连接、union并集
  19. [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)
  20. .NET设计模式 第二部分 创建型模式(1)—:单件模式(Singleton Pattern)

热门文章

  1. 使用json格式去call外部系统
  2. MVC项目不同域之间的UrlRouting
  3. 增强MyEclipse提示功能
  4. SPI protocol驱动编写实例
  5. ABAP内表数据和JSON格式互转
  6. c++之带默认形参值的函数
  7. Jenkins + Jmeter +Ant自动化集成环境搭建(一)
  8. Linux系统中当前路径不加入PATH的原因
  9. android开发环境完整搭建
  10. Linux-shell-算术运算{expr、bc、dc、(( ))和[ ]}