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

本文通过具体案例探讨了SQL中使用TOP进行分页时可能遇到的问题,并详细解释了为何同一查询的不同写法会导致结果差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【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  top2*from (selecttop4*from Member ) m  order by m.RowID desc

 

  我执行中间那一段子查询:

 

selecttop4*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网友提出的这个问题)

 

准备工作

ifobject_id('zhuisuo')is not null
drop table zhuisuo
go
create table zhuisuo
(
id
intnull,
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语句

 

selecttop2*from (selecttop4*from zhuisuo) m order by m.id desc
select top
2*from (selecttop4*from zhuisuo order by idasc) m order by m.id desc

 

  执行结果大家会发现

1

 

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

  怎么会这样呢?

 

1

 

來自:http://publish.itpub.net/a2010/1224/1142/000001142262.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值