【发布时间】:2013-04-29 06:52:06
【问题描述】:
我对 SQL 执行顺序没有深入了解。
当我执行查询时
select top 2 * from Configuration
它给了我
ABC1,100,Data001
ABC2,200,Data002
当我执行查询时
select top 2 * from Configuration order by 1 desc
它给了我
XYZ1,400,Data100
XYZ2,300,Data099
当我执行查询时
select * from (select top 2 * from Configuration) as a order by 1 desc
它给了我
XYZ1,400,Data100
XYZ2,300,Data099
我的问题是为什么我会得到
XYZ1,400,Data100
XYZ2,300,Data099
改为输出
ABC1,100,Data001
ABC2,200,Data002
据我所知,内部查询将向外部查询返回两行。 外部查询将使用
处理这两行From->Where->group by->having->Select->Order by
执行顺序和将输出为两行,正如我预期的那样。但是 Outer Query 的 order by 会影响 Inner Query 的整个表。
请评论我犯错的地方。
【问题讨论】:
-
您使用哪种 DBMS?我正在使用 SQL Server,结果符合预期
ABC2,200,Data002后跟ABC1,100,Data001。 -
@Mithrandir - 不。我在 SQL Server 中没有得到预期的结果。
-
我使用的是 SQL Server 2008。
-
嗨,Roms,非常好的问题,许多数据库专家总是误以为是这个问题。请参考我的回答,它会对你有所帮助。
标签: sql sql-server-2008 select sql-order-by