为什么当我们在列中有一个 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 的值都是未知的。
NULL 表示未知。没有其他解释是有效的。
如果那是真的,他们不会排在最后,因为该值可能大于所有其他值?
没有可能。没有潜在价值。未知就是未知就是未知。
至于为什么它首先出现而不是最后出现,已发布的 SQL 标准并未满足这一点,不幸的是,这由 RDBMS 供应商自行决定:
维基百科:SQL 标准没有明确定义 Null 的默认排序顺序。相反,在符合标准的系统上,可以分别使用 ORDER BY 列表的 NULLS FIRST 或 NULLS LAST 子句在所有数据值之前或之后对 Null 进行排序。然而,并非所有 DBMS 供应商都实现了此功能。不实现此功能的供应商可能会为 DBMS 中的 Null 排序指定不同的处理方式。