zoukankan      html  css  js  c++  java
  • # SQL结果排序与HAVING

    SQL结果排序与HAVING

    SQL结果排序

    默认SELECT出来的数据是无须排列的,当然,有时候看起来可能像是按照一定顺序排列的。然而那只是偶然。

    我们如果想要SELECT出来的结果是按照一定顺序排列的话,就需要使用到ORDER BY指令。该指令的使用格式为ORDER BY <排序键> <排序规则>

    其中,排序规则不是必须的,如果不指定排序规则的话,默认就是ASC升序,如果想要降序的话,就应该使用DESC

    之前有讲到NULL值不能用于比较,因为他的返回值是一个不确定值。而对于ORDER BY来讲,拥有NULL值的行会集中出现在开头或者结尾。有的DBMS可以选择其出现的位置。

    ORDER BY的执行出现的返回结果之前的最后一步。同时,即使是SELECT之句中没有出现过的列也可以作为排序键。

    排序键允许有多个,同时可以对多个排序键指定不同的排序规则。

    HAVING

    与WHERE的作用都是限制数据的条件,但是他们的作用有明显的不同。

    WHERE用来筛选数据记录,而HAVING用来筛选GROUP BY之后生成的子数据表。然而有时候我们可以发现使用HAVING或者WHERE的结果并没有区别,都可以得到自己想要的数据。

    但是优先选择WHERE,因为一般来讲他更快。

    同时HAVING的聚合键允许使用函数以及常数,聚合函数以及GROUP BY使用的聚合键。

    总结

    现在我们再排一遍语法顺序:

    SELECT --> FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY

    DBMS的执行顺序是:

    FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY

    我们可以发先语法顺序和执行顺序还是拥有很大差别的。

    同时之前有讲到GROUP BY不能够使用SELECT子句中定义的别名,从这里就可以看出原因。因为GROUP BY的执行在SELECT子句之前。然后ORDER BY是可以使用定义的别名的。

    同时HAVING的聚合键和WHERE的聚合键拥有同样的限制。我们只要明白HAVING的聚合键是为了筛选子数据表的,对于聚合键的选择就应该容易明白了。

  • 相关阅读:
    (8)设计模式-桥接模式
    (6)设计模式-原型模式
    (5)设计模式-原型模式
    hdu4714树形DP+贪心(乱搞)
    hdu1059(背包dp二进制优化)
    uva12558 Egyptian Fractions (HARD version)(迭代深搜)
    hdu4135 Co-prime【容斥原理】
    BZOJ 1509[NOI 2003]逃学的小孩 树形dp
    bzoj1812 [Ioi2005]riv
    bzoj 2243 [SDOI2011]染色(树链剖分+线段树合并)
  • 原文地址:https://www.cnblogs.com/freesfu/p/11440269.html
Copyright © 2011-2022 走看看