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

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

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

  6. 做了一个测试,建了一个学生分数表。

    然后查询所有科目都大于80分的学生姓名,我先用的这条语句:select name,fenshu from stu group by name having fenshu > 80; 查询结果如图:

    和预期结果不一样,having是对查询出来的结果进行过滤,而且我这里还根据名字分组了,本以为having是在每个分组内逐行比较,当所有行都满足条件的时候才返回。现在看来并不是这样的,having应该是只比较每个分组内的第一条数据,如果满足条件就返回。至于分组内的其他记录不比较了。所以上面的语句执行结果返回的是三个学生都满足。我把王五的语文改成70分,数学改成90,结果是没有王五,也说明了having确实只比较分组内的第一条数据,其他的不比较。           那么正确语句是select name from stu group by name having name not in ( select name from stu where fenshu <80);
    这个是查询到所有分数大于80的学生姓名。  又测试了一下select name from stu group by name having name in ( select name from stu where fenshu >80);  把not去掉,fenshu>80  结果和前两条语句都不一样,这个是只要有至少一门大于80分就可以返回。

最新文章

  1. CSS3 Notes: -webkit-box-reflect实现倒影
  2. 实验一 认识DOS
  3. Ionic - 先进的 HTML5 移动开发框架和 SDK
  4. LINUX运维实战案例之文件已删除但空间不释放问题的分析与解决办法
  5. struct大小
  6. Key Figure中的Aggregation决定了DSO/CUBE转换规则中的Aggregation合计方式
  7. Java基础(41):Java中集合中需要注意的几个要点(关于Collection与Map)
  8. init: Associated with Deployer &#39;Catalina:type=Deployer,host=localhost&#39;
  9. std::string和int类型的相互转换(C/C++)
  10. JQuery学习笔记【CSS选择符】--02
  11. 表达式树动态拼接lambda
  12. Visual Studio 单元测试之三---压力测试
  13. 图片与Base64相互转换 jar包
  14. Mac Pro 坑记录
  15. Android ScrollView内部组件设置android:layout_height=&quot;fill_parent&quot;无效的解决办法
  16. oracle 批量更新merge语句
  17. Eclipse中GitLab的配置和使用入门
  18. 【AI】face_recognition
  19. Oracle卸载之Win7操作系统下Oracle11g 数据库卸载过程图解
  20. Python CSV Reader/Writer 例子--转载

热门文章

  1. redis 工具包
  2. java----FileInputStream类与FileReader类的区别(转)
  3. c++ 性能优化策略
  4. 服务端相关知识学习(三)Zookeeper的配置
  5. 如何调试Python程序 通过IDLE
  6. 谁是嫌疑犯问题Python枚举法
  7. Spring中常用的设计模式之:代理模式
  8. Nginx如何配置防盗链
  9. Shell脚本case语句
  10. GNU编译器:Codesourcery