SQL子句执行顺序

参考:

http://www.cnblogs.com/qanholas/archive/2010/10/24/1859924.html

http://www.cnblogs.com/liuzhendong/archive/2011/10/27/2226805.html

查一下MSDN就清楚了整个SQL的执行顺序.

 

http://msdn.microsoft.com/en-us/library/ms189499(v=SQL.100).aspx

Processing Order of the SELECT statement
The following steps show the processing order for a SELECT statement.

1.FROM

2.ON

3.JOIN

4.WHERE

5.GROUP BY

6.WITH CUBE or WITH ROLLUP

7.HAVING

8.SELECT(含聚合函数:如SUM、COUN、MIN、MAX、、、、、)

9.DISTINCT

10.ORDER BY

11.TOP

 

也就是说, 先进行on的过滤, 而后才进行join, 这样就避免了两个大表产生全部数据的笛卡尔积的庞大数据. 

这些步骤执行时, 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。

如果没有在查询中指定某一子句,将跳过相应的步骤。

 

下面是<<Inside Microsoft SQL Server 2008 T-SQL Querying>>一书中给的一幅SQL 执行顺序的插图.

 

posted on 2015-05-04 13:11  高达  阅读(186)  评论(0)    收藏  举报

导航