【Access小品】揣测--关于TOP的阐释
时 间:2012-11-21 10:26:56
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【Access小品】揣测--关于TOP的阐释
正 文:
版友李乐同志问为什么sql的top子句设置为5,部分查询结果超过5条记录。这个问题在前不久我在处理一个示例时遇到过,当时没有太多想。今天看到这个问题后,觉得还是有些意思,便决定深入观察一下,看看是否能找到问题所在,并对此做出一个合理的解释。于是我整了一个极为简单的数据表,并以此编写了几个查询语句,问题的原因很快就浮现出来了。
当没有排序子句(order by)时,top语句可以按照设置的条数进行显示,当设置了排序子句后,情况就发生了变化,top对记录条数的控制有些手足无措了,它不再一定返回设定的条数。为什么会这样呢?
萨特的存在主义哲学中有一句名言叫做:存在就是合理。从这个哲学思想出发,我们来揣测一下SQL语句如此设计的道理所在。不排序的情况下,记录按照其存储的物理位置存放,这个时候你要TOP一下记录,SQL理解你只是想按照物理位置找到前n条记录。不过结果有些诡异,可能并不是你希望要的数据。
select top 2 * from 表1 where f1>="0" and f1<="6"
显示出来的2和4,而不是1和2。原因就在于2和4的id分别为1和2,这是它们的存储的物理位置。
为了得到你想要的数据,你通常会加上排序子句,将SQL语句写为:
select top 2 * from 表1 where f1>="0" and f1<="6" order by f1
奇怪的事情出现了。这时显示的是三条记录,一条记录f1的值为1,两条记录的值为2。这说明什么?说明SQL在说:“我不知道你到底想要物理位置上的哪些记录?去球!我把你可能想要的记录都给你好了。”再深入一些,为什么SQL理解为这是你可能想要的记录呢?我们来设想一个实际情况:在一场考试中有1个学生得了100分,3个学生得来98分。你想找排名前三名的学生。你希望SQL语句怎么给你结果?结论是不言而喻的。
你可能不必去想这些道理,记住以下结论就可以了:不排序,top以记录的物理位置列出最前面的几条记录;排序,top以排序结果列出最前面的n-1条记录,如果第n条记录有相同的值则全面列出它们。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)