SQLSERVER的TOP

相信很多使用SQL很多人都用过TOP语句

使用方法是:

SELECT TOP (n)

FROM tablename

WHERE condition

我们可以很方便的从表tablename去到符合条件的前n条数据。

--------------------------------------------------------------------------------------

例如,我们有表

aaa

表中数据是:

  qq             qq2           
a1         11        
a2         11        
a3         11        
a4         11        

执行:

SELECT TOP (2) qq, qq2
FROM aaa

出来的结果是: 

qq qq2
a1         11        
a2         11        

这正是我们想要的,这个东西还真是不错,用着蛮方便的哟。

--------------------------------------------------------------------------------------

但是,今天程序中跑出来一个东西,发现不是自己想要的东西。

现象是这样的,

数据还是上面的数据,检索条件上面的检索条件,我加了一个order by语句,当然,这个orderby有点特殊,就是,我要排序的列的值全部是相同的。

正常没有TOP条件的情况下

SELECT qq, qq2
FROM aaa
ORDER BY qq2

结果和前面没有orderby是一致,也是和数据库中存放的次序是一样的。

  qq             qq2           
a1         11        
a2         11        
a3         11        
a4         11        

当我们增加一个TOP(1)的时候,正常情况下,我们会认为应该检索出来第一条,也就是【a1】【11】。

SELECT TOP (1) qq, qq2
FROM aaa
ORDER BY qq2

但是,真正检索出来的数据是这样的

qq qq2
a2         11        

这个时候感觉sqlserver做的有点和我们常识不一样了。

同样,当我们换作是TOP(2)的时候,检索出来的第三件和第二件

TOP(3)的时候,检索出来的是第四件和第三件和第二件。

SQLSERVER这么做或许也无可厚非,因为排序的字段的值是一样的,可以认为等价的数据,返回谁,按理来说,应该对业务没有什么影响的。

*编程中,偶尔也会遇到我们预想之外的事情,也会给我们写惊喜的。

原文地址:https://www.cnblogs.com/gekal/p/3129090.html