SQL nulls值排序問題

2021-08-20 02:08:33 字數 1076 閱讀 1503

當我們使用order by來為指定的字段進行排序時,如果db中該字段的值存在著null值,那麼在排序時這些null值會不會參與排序呢?如果參與排序的話,又是以怎樣的標準來排序?

在不同的db中,對於null值的預設值不同。

如果對乙個學生表裡的資料按照age欄位進行順序排序,如下:

select * from student order

by age

如果name欄位存在null值,那麼這條sql的結果集就如下所示:

|id|student|age|

|1|小明|10|

|2|小紅|12|

|3|小黑|null|

|4|小白|null|

因為null值預設是最大,所以在公升序排列中null值的記錄就會被排到最後。同樣地,如果是降序排列,null值記錄就會被排到最前面。

oracle中同樣認為null值最大,也就是說,公升序排列時null值預設排在最後;降序排列時null值預設排在最前。

mysql和sqlserver則相反,null值預設是最小。當公升序排列時null值預設排在最前;降序排列時null值預設排在最後。

在實際的業務中,null值參與的排序這可能會造成一些不必要的問題,有時候甚至會造成乙個bug並且難以被發現。

所以,在對這些有可能存在null值的字段進行排序時需要注意使用關鍵字nulls last/first

我們可以通過nulls last或者nulls first關鍵字來指定這些null值的record是排在最後還是最前,如下:

select * from student order

by age desc nulls last;

該語句指定了降序排列時,null值排到最後;需要注意的是,該關鍵字只能搭配order by來使用。一共也就四種用法:

mysql 空值排序問題

postgresql 資料庫null值的預設排序行為與查詢、索引定義規範 - nulls first\last, asc\desc

Mysql 排序null值 排序問題分析

mysql中null值的排序問題分析 如下表t user name age zhangsan 1 lisi null wangwu 2 www.2cto.com 執行一下sql sql select from t user order by age name age lisi null zhangs...

mapreduce對key值排序問題

最近在學習mapreduce程式設計遇到很多用mr實現按某一列值排序,或二次排序的類似問題,於是試著用mr實現各種排序問題,最終有點小總結 無需在key物件之外寫任何排序函式,mr會完成按key值排序,具體詳解如下 在這之前要先說一下writablecomparable介面。writable介面大家...

空值排序與時間倒敘問題

單獨將空值排序在最後 select from users us order by us.create time nulls last 單獨將空值排序在最前 select from users us order by us.create time nulls first 時間倒敘 select fro...