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

猜你喜欢

转载自www.cnblogs.com/freesfu/p/11440269.html