一尘不染

为什么首先对 NULL 进行排序?

sql-server

为什么当我们在列中有一个 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 中都是如此。


阅读 154

收藏
2022-11-23

共1个答案

一尘不染

BOL:值为 NULL 表示该值未知。NULL 值不同于空值或零值。没有两个空值是相等的。两个 null 值之间或 NULL 与任何其他值之间的比较将返回未知,因为每个 NULL 的值都是未知的。

NULL 表示未知。没有其他解释是有效的。

如果那是真的,他们不会排在最后,因为该值可能大于所有其他值?

没有可能。没有潜在价值。未知就是未知就是未知。

至于为什么它首先出现而不是最后出现,已发布的 SQL 标准并未满足这一点,不幸的是,这由 RDBMS 供应商自行决定:

维基百科:SQL 标准没有明确定义 Null 的默认排序顺序。相反,在符合标准的系统上,可以分别使用 ORDER BY 列表的 NULLS FIRST 或 NULLS LAST 子句在所有数据值之前或之后对 Null 进行排序。然而,并非所有 DBMS 供应商都实现了此功能。不实现此功能的供应商可能会为 DBMS 中的 Null 排序指定不同的处理方式。

2022-11-23