什么是Null值
在MSSQL中,Null值代表空值,表示该字段目前没有任何值。
Null值与空字符串''是不同的。
空字符串''是一个特殊的字符串值,不是Null值。
判断字段的值是否为Null
在MSSQL中,判断字段的值是否为Null,不能使用等号=或不等号<>。
应该使用IS NULL或IS NOT NULL判断。
IS NULL用于判断某个值是否为Null,IS NOT NULL用于判断某个值是否不为Null。
SELECT * FROM table_name WHERE column_name IS NULL;
SELECT * FROM table_name WHERE column_name IS NOT NULL;
注意事项
1. NULL值和任何其他值之间的比较结果都是未知的。
因此,使用等号=或不等号<>比较NULL值和任何其他值始终返回false,即不存在任何匹配的行。
SELECT * FROM table_name WHERE column_name = NULL; -- 没有匹配的行
SELECT * FROM table_name WHERE column_name <> NULL; -- 没有匹配的行
2. NULL值无法进行数学运算,包括加减乘除和取模等操作。
因为NULL值不是数字,它代表的是“无值”。
SELECT NULL + 1; -- 结果是NULL
SELECT column_name + 1 FROM table_name; -- 如果column_name的值为NULL,结果依然是NULL
3. 当涉及到WHERE子句、JOIN子句、GROUP BY子句和HAVING子句时,NULL值往往需要特别注意。
例如,在WHERE子句中判断某个值是否为NULL,如果使用=或<>等运算符是错误的,应该使用IS NULL或IS NOT NULL。
SELECT * FROM table_name WHERE column_name = NULL; -- 错误做法
SELECT * FROM table_name WHERE column_name IS NULL; -- 正确做法
另外,使用GROUP BY时,将NULL值所在的行与其他行分组有时不符合预期。应该使用“IS NULL”或“IS NOT NULL”对NULL值进行分组。
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; -- 不符合预期
SELECT CASE WHEN column_name IS NULL THEN 'NULL' ELSE column_name END, COUNT(*) FROM table_name GROUP BY CASE WHEN column_name IS NULL THEN 'NULL' ELSE column_name END; -- 正确做法