Group By 和 Having, Where ,Order by语句的执行顺序

WBOY
發布: 2016-06-07 16:14:43
原創
1485 人瀏覽過

一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。 Group By 和 Having, Where ,Order by这些关键

一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。

Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

  • 首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
  • 然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组
  • 接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉
  • 最后按照Order By语句对视图进行排序,这样最终的结果就产生了。

在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:

<code>SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
</code>
登入後複製

这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。

PS:

  • 凡是在group by后面出现的字段,必须同时在select后面出现;

  • 凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.

  • having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。

(文:程序员之家)
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!