SQL 查询基础(2)

对于简单的 SQL 查询语句,稍微有一些的SQL基础的人一般都会,现在我会深入一下SQL 查询的逻辑执行过程

1 SELECT  DISTINCT  TOP(<top_specification>)  <select_list>
2 FROM  <left_table> 
3 <join_type> JOIN <right_table> 
4 ON <on_predicate>
5  WHERE <where_predicate>
6  GROUP BY <group_by_specification>
7  HAVING <having_predicate>
8  ORDER BY <order_by_list>

对于以上代码,在SQL Server 中,逻辑执行顺序如下:

1) FROM 语句,从数据库中找到主表数据源 Table1(T1)

2) JOIN 语句,找到 JOIN 后边的表 Table2(T2),T1 和 T2做一个笛卡尔乘积,保存到虚表中 VT1

3) ON 条件,从 VT1 中,找到符合 ON 条件的数据集,放到虚拟表中 VT2

4) 如果 JOIN 前是 INNER,或者直接就是 JOIN,略过这一步,如果 JOIN 前边是 LEFT,从 VT1 中找到 T1中有值在 T2中为 NULL 的值插入到 VT2 中

    (同理,如果是 RIGHT,从 VT1中中找到 T2 中有值但是在 T1中为 NULL 的值插入到 VT2 中) ,生成虚拟表 VT3

5) WHERE 条件,从 VT3 中找到符合 WHERE 条件的数据集合,生成虚拟表 VT3

6) GROUP BY 语句,将 VT3 中的数据集合按照 GROUP BY 的列进行分组,每一组将会只有一行数据,生成虚拟表 VT4

7) HAVING 语句,从 VT4中,找到符合条件的数据集,生成虚拟表 VT5

8) SELECT 语句,从 VT5 中,选择需要获取的数据列,生成虚拟表 VT6

9) DISTINCT , 从 VT6 中,过滤掉重复数据,生成虚拟表 VT7

10) TOP, ORDER BY: ORDER BY 字段对数据集排序,生成游标 VC,然后 TOP 会将游标再次选择 TOP 后数量的结果集放到虚拟表中,最后返回查询结果。

需要注意:第10步,ORDER BY 之后,生成的是游标,因为SQL是对集合编程,对于集合是没有顺序的,ORDER BY 排序之后,实际结果是实现的一个游标。

加上 TOP 之后,又会将游标放入的虚拟表中。

下一篇文章会使用一个具体例子来说明一下逻辑执行的过程。

 

posted on 2014-04-25 10:42  DanielHu  阅读(191)  评论(0编辑  收藏  举报