sql server 2008中是先执行order by 后执行select top 3*from ceshi?为什么和规定的执行顺序相反?

SQL语法定义是先执行Select后执行orderby,为什么结果会是执行步骤1select*fromceshi1步骤2selecttop3*fromceshi1(注意:... SQL 语法定义是先执行 Select 后执行 order by,为什么结果会是
执行步骤 1select * from ceshi1

步骤2 select top 3 * from ceshi1 (注意:top是按序号选的前三个。仔细观察后面order by)

步骤3 select top 3 * from ceshi1 order by score desc

为什么不是先select top 3,后再在序号001,002,003中按降序排列??? 感谢您的不吝赐教!!!
4 执行此SQL语句:select * from (select top 3 * from ceshi1 )as y order by y.score 结果也是,先 order by
展开
 我来答
Ethan666888
2014-02-15 · TA获得超过1万个赞
知道小有建树答主
回答量:950
采纳率:50%
帮助的人:397万
展开全部
首先你明白你写这句话的意思没有:

select top 3 * from ceshi1,是取前3条记录,默认是取snum最小的3个

select top 3 * from ceshi1 order by score desc,是按socre降序取前3条;
同样如果select top 3 * from ceshi1 order by sname desc,是按sname降序取前3条;

你是想先取前3条再降序排序?

那这样写
select * from (select top 3 * from ceshi1) order by score desc
更多追问追答
追问
我的问题是,已知 SQL 执行的顺序是 From→where→Group(having)→Select→最后Order by。
不管怎样,应该是先按where选出元组后,选出的元组再按升序或降序排列。也就是select top 3 * from ceshi1 order by score desc,他的结果应该是先选出编号为001、002、003的元组,再在这三个元组中按score的降序排列。感谢
追答
那这就是sql server的底层机制,是人家的语法规范,只能遵循了!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxd9915
2014-02-15 · TA获得超过299个赞
知道小有建树答主
回答量:461
采纳率:50%
帮助的人:208万
展开全部
规范吧。
要得到你的结果,恐怕只有先select top到临时表,再排序输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rkc009
2014-02-15 · TA获得超过1499个赞
知道大有可为答主
回答量:2098
采纳率:60%
帮助的人:1676万
展开全部
你理解的没错哦,是先查询 再 order by。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式