翻译  SQL2005 技术内幕Querying 第一章(1节) 收藏

 

第一小节.Logical Query Processing Phases

本节介绍查询语法,开始我将简要介绍每一步骤,然后将在每一小节详细的介绍每一个步骤,并举例说明。

Listing 1-1. Logical query processing step numbers

(8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1)  FROM <left_table>
(3)    <join_type> JOIN <right_table>
(2)      ON <join_condition>
(4)  WHERE <where_condition>
(5)  GROUP BY <group_by_list>
(6)  WITH {CUBE | ROLLUP}
(7)  HAVING <having_condition>
(10) ORDER BY <order_by_list>

SQL区分其他编程语言的第一个明显特征是代码被处理的顺序,其他大多数语言,代码是按照写的顺序依次处理,SQL第一个被处理的从句是From ,而Select 却几乎在最后才被处理。

每一个步骤生成一个中间虚拟表,作为下一个步骤的输入,而这些虚拟表对于用户程序和外部调用者不可见,仅最后一步生成的表才返回给调用者,在一个查询中假如无法区分某个从句,对应的步骤将简单的跳过。

下面将简要介绍每个步骤:

别太担心每一步骤的描述是否合理,这里仅举例说明,之后的文章将详细的介绍每一个步骤。

1.       FROM: 对于最先连接的两个表,返回两个表的笛卡尔积,返回虚拟表VT1.

2.       ON: ON作为过滤器,将返回VT1中满足条件的行,塞入表VT2.     

3.       OUTER (join): 如果指明是OUTER JOIN,则将返回外部表符合条件的行,而内部表假如没有记录,则增加到其中,返回虚拟表VT3.如果FROM子句中有两个以上表,则重复执行步骤1到步骤3的动作,前两个表输出符合条件的记录,然后和下一个表连接,直到所有的FROM子句处理完毕.(INNER JOIN  CROSS JOIN 则类似).    

4.       WHERE: WHERE过滤虚拟表VT3中的符合条件的数据,塞入表VT4.     

5.       GROUP BY: 虚拟表VT4中的行将按照GROUP BY中的列分组,返回虚拟表VT5.   

6.       CUBE | ROLLUP: 分组以后继续分组,生成虚拟表VT6.       

7.       HAVING: 过滤VT6中符合条件的分组到虚拟表VT7.    

8.       SELECT: 返回相应的Column到虚拟表 VT8.    

9.       DISTINCT: VT8重复行将删除. 生成虚拟表VT9.

10.   ORDER BY: 虚拟表VT9中的行将按照ORDER BY 子句排序,生成虚拟光标VC10. 

TOP: 指明多少行或者多少百分比的数据将返回.

 

发表于 @ 2008年10月06日 04:15:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:非聚集索引上放在堆上时分配给表物理磁盘的原理 | 新一篇:SQL2005 技术内幕Querying 第一章(2节)

  • 发表评论
  • 评论内容:
  •  
Copyright © Lori268
Powered by CSDN Blog