• # 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的聚合键是为了筛选子数据表的,对于聚合键的选择就应该容易明白了。

  • 相关阅读:
    从零开始学 ASP.NET Core 与 EntityFramework Core 介绍
    Spring Cloud Stream
    基于vue实现的三级联动下拉框
    中国十大瓜子品牌排行榜
    春秋战国2020
    spring boot 2 + shiro 实现权限管理
    轻松搭建CAS 5.x系列(1)-使用cas overlay搭建SSO SERVER服务端
    springboot+maven+thymeleaf配置实战demo
    Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程
    idea使用maven install命令打包(springboot),jar运行时出现没有主清单属性
  • 原文地址:https://www.cnblogs.com/freesfu/p/11440269.html
Copyright © 2020-2023  润新知