背景
为什么mysql不建议使用null值作为列的默认值?明明null值在存储的时候会占用更少的空间,为什么要使用空字符或者0等值来作为默认值呢?
// 查询不到department=null的值
SELECT * FROM employees WHERE department != 'HR';
在 MySQL 中处理“不等于” (!= 或 < >) 时不等于无法获取到null值的行记录信息。
详解
不等于 (!= 或 < >) 运算符
- 用于比较两个值是否不相等。
SELECT * FROM table WHERE column != value;
SELECT * FROM table WHERE column <> value;
IS NULL 运算符
- 用于判断某个列是否为 NULL 值。
SELECT * FROM table WHERE column IS NULL;
问题与注意事项
1. NULL 值在比较中的行为
在 SQL 中,NULL 表示缺失的未知数据,因此与任何值(包括 NULL 本身)的比较结果都是 NULL,而不是 TRUE 或 FALSE。这意味着 NULL 不等于任何值,甚至不等于 NULL。
例如:
SELECT * FROM table WHERE column != 'value';
如果 column 中有 NULL 值,这些行将不会包含在结果集中,因为 NULL != 'value' 的结果是 NULL,而不是 TRUE。
2. IS NULL 与 != 一起使用
为了正确处理 NULL 值,我们通常需要在条件中显式检查 NULL。例如,下面的查询将返回 column 不等于 'value' 或者 column 为 NULL 的所有行:
SELECT * FROM table WHERE column != 'value' OR column IS NULL;
这种写法确保了 NULL 值也被正确处理,而不仅仅是被 != 排除。
