mysql:where和having的区别

  1. where在查询数据库结果返回之前对查询条件进行约束,就是结果返回之前起作用,而having是查询数据库,已经得到返回的结果了,再对结果进行过滤。(结果返回前,结果返回后)
  2. where条件不能使用聚合函数,想想也能明白因为聚合函数是已经返回的结果,having后面可以使用聚合函数;
  3. where后面接的必须是表中有的字段,查询结果中可以没有;但是having后面接的字段必须是返回的结果中有的,查询的表中有没有无关;(不理解这句话可以参考:原文
  4. 使用where子句,可以对条件中用到的字段创建索引,提高查询效率。
  5. 当在Where子句和Having子句中都可以使用的条件,从语句的执行效率来看,最好使用Where子句。

    在使用Count函数等对表中的数据进行聚合操作时,DBMS内部会进行排序处理,而排序操作会增加机器的负担,减少排序的行数,可以增加处理速度

    使用Where子句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。但是Having子句是在排序之后才对数据进行分组的,因此与前者相比,需要排序的数据量就要多得多。

猜你喜欢

转载自www.cnblogs.com/bneglect/p/10484015.html