使用NULL的注意点(SQL)

使用NULL的注意点(SQL)

Content #

  1. NULL与别的值进行+-*/等计算操作(包括在大多数函数中使用NULL)后,结果是NULL(标量表达式)。NULL与别的值进行=、 >、<等比较操作后,结果是Unknown(断言)。
  2. 在where/on/having和if/case when中,只有True才使条件成立(即Unknown当作False来处理)。
  3. 包含外键约束和Check约束的字段允许NULL(即约束只当条件为False时出错,Unknown是不管的)。
  4. 包含唯一约束(unique index)的字段只允许一个NULL的行,再插入或更新该字段为NULL的行会报字段重复的错误。
  5. GROUP BY时,所有NULL被视为一组。
  6. ORDER BY时,所有NULL排在一起,但NULL排在非空值的前面(如SQL Server)还是后面(如Oracle),SQL标准未规定。
  7. 聚集函数(SUM/AVG/MAX/MIN/COUNT)忽略NULL的行。
  8. declare的变量,在未赋值之前为NULL。
  9. 与NULL处理相关的运算符和函数
    • IS NULL/IS NOT NULL:用这两个运算符来判断一个值是否为NULL,而不是=或< >。
    • ISNULL/COALESCE:取第一个非空值(注意两个函数的数据类型转换规则不同)。
    • NULLIF(a,b):等价于CASE WHEN a = b THEN NULL ELSE a END。

From #