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;

发表评论

邮箱地址不会被公开。 必填项已用*标注