【IT168 技术文档】首先从Jerome Wong网友说起
他提出了一个这样的问题
本人写了好几年SQL语句了,从来没注意到这件事情。
例如:
数据表如下:
ID EMPNO NAME AGE
1 26929 Jerome 28
2 28394 Quince 27
3 20983 Green 30
4 27189 Mike 30
5 23167 Arishy 30
6 26371 Yager 29
我写了SQL语句想取得第3、4笔数据,测试分页玩的。
select top 2 * from (select top 4 * from Member ) m order by m.RowID desc
我执行中间那一段子查询:
select top 4 * from Member
取得的是:
1 26929 Jerome 28
2 28394 Quince 27
3 20983 Green 30
4 27189 Mike 30
但是整个SQL语句的结果却是:
5 23167 Arishy 30
6 26371 Yager 29
真的不知道到底怎么会出现这种情况,请高手指教。
其实不管你是新手还是高手在写程序当中经常会碰到类似这样的细节问题
下面我就对Jerome Wong网友所提出的问题针对select top做出一系列的分析(在这里要感谢Jerome Wong网友提出的这个问题)
准备工作
if object_id('zhuisuo')is not null
drop table zhuisuo
go
create table zhuisuo
(
id int null,
name varchar(20) null
)
insert into zhuisuo values(1,'追索1')
insert into zhuisuo values(2,'追索2')
insert into zhuisuo values(3,'追索3')
insert into zhuisuo values(4,'追索4')
insert into zhuisuo values(5,'追索5')
insert into zhuisuo values(6,'追索6')
insert into zhuisuo values(7,'追索7')
insert into zhuisuo values(8,'追索8')
insert into zhuisuo values(9,'追索9')
insert into zhuisuo values(10,'追索10')
go
drop table zhuisuo
go
create table zhuisuo
(
id int null,
name varchar(20) null
)
insert into zhuisuo values(1,'追索1')
insert into zhuisuo values(2,'追索2')
insert into zhuisuo values(3,'追索3')
insert into zhuisuo values(4,'追索4')
insert into zhuisuo values(5,'追索5')
insert into zhuisuo values(6,'追索6')
insert into zhuisuo values(7,'追索7')
insert into zhuisuo values(8,'追索8')
insert into zhuisuo values(9,'追索9')
insert into zhuisuo values(10,'追索10')
go
下面我们来简单写两句Select语句
select top 2 * from (select top 4 * from zhuisuo) m order by m.id desc
select top 2 * from (select top 4 * from zhuisuo order by id asc) m order by m.id desc
select top 2 * from (select top 4 * from zhuisuo order by id asc) m order by m.id desc
执行结果大家会发现
平常很多人会认为这两条语句执行的结果会一样
怎么会这样呢?