NULL 不能直接用普通的比较运算符(如 =、<>、> 等)来判断
SELECT * FROM `sheet1` where nickname <> ‘测试’ and phone is not null order by phone ; mysql为什么把nickname 为 null 的也排除了
在 MySQL 中,NULL 是一个特殊的值,表示“未知”或“不存在”。它与普通值(如字符串、数字等)的处理方式不同。具体来说,NULL 不能直接用普通的比较运算符(如 =、<>、> 等)来判断,因为任何涉及 NULL 的比较都会返回 UNKNOWN,而不是 TRUE 或 FALSE。
SELECT * FROM `sheet1` WHERE nickname <> '测试' AND phone IS NOT NULL ORDER BY phone; |
关键点:nickname <> ‘测试’
对于 nickname 列中的值为 NULL 的行,nickname <> ‘测试’ 这个条件会被评估为 UNKNOWN。
在 SQL 中,只有当条件为 TRUE 时,行才会被选中。因此,nickname 为 NULL 的行不会满足这个条件,从而被排除。
为什么 NULL 不等于 ‘测试’ 也不成立?
NULL 表示“未知”,所以你无法确定 NULL 是否等于 ‘测试’ 或者不等于 ‘测试’。
因此,nickname = ‘测试’ 和 nickname <> ‘测试’ 对于 NULL 值都会返回 UNKNOWN。
SELECT * FROM `sheet1` WHERE (nickname <> '测试' OR nickname IS NULL) AND phone IS NOT NULL ORDER BY phone; |