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

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

  • 相关阅读:
    牛影传说【线段树+BFS序运用】
    动态规划 :传纸条
    CQYZ-OJ P1377 危险的组合
    使用 git 管理你的配置文件
    Exponential Distribution
    初尝 C++ 类设计
    Android刷机的一般步骤
    重装 Linux 记录
    Linux 折腾记录 (非正式)
    最大熵对应的概率分布
  • 原文地址:https://www.cnblogs.com/gekal/p/3129090.html
Copyright © 2020-2023  润新知