Sql-Server

為什麼 NULL 首先排序?

  • April 7, 2016

為什麼當我們在一列中有一個NULL值並且我們按值升序排序時,NULL首先排序?

select 1 as test
union all
select 2
union all
select NULL
union all
select 3
union all
select 4
order by test

結果是

NULL
1
2
3
4

我一直認為 NULL 意味著“不確定”或可能的“未知”。如果這是真的,他們不會排在最後嗎,因為該值可能大於所有其他值?(或者這是某個地方的排序選項?)

我在 SQL Server 2008R2 上,但我懷疑這在所有 SQL Server 中都是如此,並且可能在所有 RDBMS 中都是如此。

BOL : NULL 值表示該值未知。NULL 值不同於空值或零值。沒有兩個空值是相等的。兩個空值之間或 NULL 與任何其他值之間的比較返回未知,因為每個 NULL 的值都是未知的。

NULL 表示未知。沒有其他解釋是有效的。

如果這是真的,他們不會排在最後嗎,因為該值可能大於所有其他值?

不可能。_ 沒有潛在價值。未知就是未知。

至於為什麼它出現在第一個而不是最後一個,這不是已發布的 SQL 標準所滿足的,不幸的是由 RDBMS 供應商自行決定:

Wikipedia:SQL 標準沒有明確定義 Null 的預設排序順序。相反,在符合標準的系統上,可以分別使用 ORDER BY 列表的 NULLS FIRST 或 NULLS LAST 子句將 Null 排序在所有數據值之前或之後。然而,並非所有 DBMS 供應商都實現了此功能。未實現此功能的供應商可能會為 DBMS 中的 Null 排序指定不同的處理方式。

引用自:https://dba.stackexchange.com/questions/8504