# 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的聚合鍵是為了篩選子數據表的,對於聚合鍵的選擇就應該容易明白了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM