日期:2014-05-18  浏览次数:20598 次

条件执行的先后问题
SQL code

select * from 表1 inner join 表2 on 表1.字段=表2.字段
where 表2.字段='某个值'

--请问以上语句中是先where 这里的条件还是先on里的条件??



------解决方案--------------------
先执行on.再执行where
------解决方案--------------------
在查询分析器中,执行如下:
set showplan_all on
go
sql 语句
go
set showplan_all off

可查看SQL语句的执行过程
------解决方案--------------------
或在查询分析器中,
输入SQL语句,
然后按[CTRL] + L 组合键,可查看执行过程
------解决方案--------------------
SQL code
SQL Select语句完整的执行顺序: 

1、from子句组装来自不同数据源的数据; 
2、where子句基于指定的条件对记录行进行筛选; 
3、group by子句将数据划分为多个分组; 
4、使用聚集函数进行计算; 
5、使用having子句筛选分组; 
6、计算所有的表达式; 
7、使用order by对结果集进行排序。 


另外:一个查询语句各个部分的执行顺序: 
--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>

------解决方案--------------------
on 条件一共11个顺序步骤
------解决方案--------------------
对于内联
将省略步骤3(添加外步行)
on 筛选器

where筛选器相继被应用
进过优化的执行计划应该没有区别