技术开发 频道

浅谈SQL"简单的"SELECT TOP应注意细节

    【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

 

  下面我们来简单写两句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

 

  执行结果大家会发现

1
 

  平常很多人会认为这两条语句执行的结果会一样

  怎么会这样呢?

1

0
相关文章