有一个表如下
userinfo
id name age
1 张三 18
2 李四 20
3 王五 22
... 中间省略若干项
60 马六 77表id为主键,自动增长列,id值无间隔1...60
写一个查询
select Max(id) from (select Top 10 id from userinfo ) as a
查询结果为60
加上排序
select Max(id) from (select Top 10 id from userinfo order by id ) as a
结果为10
求解答
userinfo
id name age
1 张三 18
2 李四 20
3 王五 22
... 中间省略若干项
60 马六 77表id为主键,自动增长列,id值无间隔1...60
写一个查询
select Max(id) from (select Top 10 id from userinfo ) as a
查询结果为60
加上排序
select Max(id) from (select Top 10 id from userinfo order by id ) as a
结果为10
求解答
不加order by id,按照系统默认的排序(如果有的话)或者按照数据插入表的时间顺序显示数据,再进行筛选.
SQL2008采用默认安装,那么默认排序不是应该是按照主键来吗?
难道是倒序?
还是因为Max的查询机制的关系?
不过,这也没什么,你没必要去研究数据是怎么存储的,用了 top 就应该严格地使用 order by ,这不会出错的.
#2. 出现楼主的现象,应该和max函数没有关系。楼主可分别执行2个select top 10 ......语句来测试一下结果
#3. 至于select Top 10 id from userinfo 和select Top 10 id from userinfo order by id的结果为何不同。可参考一下(SQL SERVER技术内幕:存储引擎)中的相关章节
不加order by时是按照数据库自己的存储逻辑来返回前10条记录的(不是磁盘的物理逻辑)。
select Max(id) from (select Top 10 id from userinfo order by id ) as a
--这是个嵌套查询
select Top 10 id from userinfo order by id
--这个是按id顺序排序,结果就1-10条记录
--然后在Max(id),当然是最大值是10了。