zoukankan      html  css  js  c++  java
  • 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这么做或许也无可厚非,因为排序的字段的值是一样的,可以认为等价的数据,返回谁,按理来说,应该对业务没有什么影响的。

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

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/gekal/p/3129090.html
Copyright © 2011-2022 走看看