zoukankan      html  css  js  c++  java
  • 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子句限制的分组。
  • 相关阅读:
    PAT:1069. The Black Hole of Numbers (20) AC
    PAT:1008. Elevator (20) AC
    PAT:1052. Linked List Sorting (25) 部分错误
    PAT:1032. Sharing (25) AC
    PAT:1059. Prime Factors (25) AC
    素数表(筛选法)
    PAT:1048. Find Coins (25)(双指针法) AC
    PAT:1048. Find Coins (25)(二分查找) AC
    iOS 9.0 设置状态栏颜色 和隐藏
    UIPageViewController用法
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4081092.html
Copyright © 2011-2022 走看看