select 姓名,电话 from Employees where 地址 ='北京' order by 编号 asc
据说select 优先级高于order by ,因此select 先执行,然后对结果order by .
但是如果是这样,上面的select 语句就应该是错的呀!因为结果中没有编号列。
而试验证明,确实是按照编号顺序排列了,请问是为什么?
...全文
21398打赏收藏
急问:select 和 order by 执行顺序的问题?
select 姓名,电话 from Employees where 地址 ='北京' order by 编号 asc 据说select 优先级高于order by ,因此select 先执行,然后对结果order by . 但是如果是这样,上面的select 语句就应该是错的呀!因为结果中没有编号列。 而试验证明,确实是按照编号顺序排列了,请问是为什么?
很好理解的,你只要看数据流的方向就可以了 ,数据库的方向是从子节点到父节点,给你举个例子,
Use [AdventureWorks]
Go
Set statistics profile on
go
Select [Name] -----3
From [Production].[Product] ----1
order by [SellEndDate] ----2
那猜测一下。
如果SQL语句是:select 姓名,电话 from Employees where 地址 ='北京'
数据库在读每一条记录时,先读取“地址”一列,判断是不是需要的,如果是需要的,再读取“姓名”、“电话”两列。
如果SQL语句是:select 姓名,电话 from Employees where 地址 ='北京' order by 编号 asc
数据库在读每一条记录时,先读取“地址”一列,判断是不是需要的,如果是需要的,再读取“姓名”、“电话”、“编号”三列,全部读取完后,再按编号排序,再输出。
如果看查询计划应该能看出来吧。