首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问关于关联子查询的有关问题

2012-04-22 
请教关于关联子查询的问题先看一段代码SQL codeselect soh1.CustomerID,soh1.SalesOrderID,soh1.OrderDate

请教关于关联子查询的问题
先看一段代码
 

SQL code
select soh1.CustomerID,soh1.SalesOrderID,soh1.OrderDatefrom Sales.SalesOrderHeader soh1where soh1.OrderDate=(    select MIN(soh2.OrderDate)        from Sales.SalesOrderHeader soh2        where soh2.CustomerID=soh1.CustomerID)order by CustomerID


现在的问题是我想知道它在执行的时候顺序是怎么执行的?
这篇文章说了sql的执行顺序 http://www.cnblogs.com/summer_adai/archive/2011/10/28/2227605.html

我现在的疑惑是当执行到where 条件时,where条件里又是一条sql语句
SQL code
select MIN(soh2.OrderDate)        from Sales.SalesOrderHeader soh2        where soh2.CustomerID=soh1.CustomerID
,那么它又会按照链接那篇文章所说的执行顺序执行吗? 如果按照链接的文章中的顺序执行,当执行到where条件时,它会怎么处理?跳到父查询?感觉像死循环似的 。还是遍历父查询的记录?  
望高手指点

[解决办法]
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>
[解决办法]
死循环不会,但是效率肯定低了:父查询涉及的表的每条记录,都需要执行一个子查询
一直不喜欢这种“乱伦”的查询,理解略麻烦,效率更成问题

热点排行