设为首页 加入收藏 联系我们
+  最新公告
+ 更多  
导航分类  
数据正在添加中!

厂商认证
·微软MCP考试信息
·致已购买非正常渠道思科折扣号的
·关于对微软考生身份证件的政策
·7月1日起微软将不再免费寄发纸
·ITIL 考后证书需重新申请
·重庆协创思科授权培训中心(重庆
·证书丢了怎么办
文章集萃
 
SQL语句中的on,where,having
  发布者: 发布时间:2015/1/6 18:03:46 阅读:1101次 【字体:

  重庆协创Oracle培训学校与您分享——SQL语句中的on,where,having。

  在使用SQL语句时,要尽量避免使用HAVING子句,因为 HAVING 只会在检索出所有的记录以后才会对结果集进行过滤。由于这个处理需要经过排序、总计等操作,若是能通过 WHERE 子句就能限制记录的数目,而且也能减少这方面的开销。

  由于(非oracle中)on、where、having这三个都可以加到条件的子句中,而且on是最先执行,where次之,having最后,主要是因为on可以先把不符合条件的记录过滤后再进行统计,所以它就可以减少中间运算所要处理的数据。按理来说应该是速度最快的,where应该也比having快点的,因为它只有过滤数据后才可进行sum,而且只有在两个表联接时才用on的,所以在只有一个表的时候,就只剩下where跟having比较了,所以having是最慢。

  在单表查询统计的情况下,若是要过滤的条件没有涉及到要计算字段,那它们的结果均是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。

  在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里