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 展开
执行步骤 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 展开
展开全部
首先你明白你写这句话的意思没有:
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
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的底层机制,是人家的语法规范,只能遵循了!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
规范吧。
要得到你的结果,恐怕只有先select top到临时表,再排序输出。
要得到你的结果,恐怕只有先select top到临时表,再排序输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你理解的没错哦,是先查询 再 order by。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询