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

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

  • 相关阅读:
    Android获取两条线之间的夹角度数
    Android字体度量(FontMetrics)
    Android下如何计算要显示的字符串所占的宽度和高度
    Android 颜色渲染PorterDuff及Xfermode详解
    从输入URL到页面加载的全过程
    滚动优化
    常用的前端相关chrome插件
    DNS预解析prefetch
    资源预加载preload和资源预读取prefetch简明学习
    使用chrome开发者工具中的performance面板解决性能瓶颈
  • 原文地址:https://www.cnblogs.com/gekal/p/3129090.html
Copyright © 2011-2022 走看看