【发布时间】:2021-06-28 03:58:04
【问题描述】:
我有一个数据库,其中有一列工作角色。我的大部分数据点没有工作角色(又名 NULL),但我可以接受。我只想将学生排除在我的桌子之外。所以我只是添加了一个 where 子句
WHERE job_role != 'student'
但令我惊讶的是,我发现 SQL 以这种方式也排除了具有 NULL 值的行。为了解决这个问题,我将 where 子句更改如下:
WHERE job_role != 'student' OR job_role IS NULL
,按预期工作。
但我仍然感到困惑。为什么 SQL 在第一种情况下会排除具有 NULL 值的行?我假设它不是仅仅丢弃具有不需要值的行,而是首先找到具有特定列的值的行,然后只要该值不等于不需要的值就选择该行。
【问题讨论】:
-
在标准 SQL 中,您可以使用
where job_role is distinct from 'student'包含为空的值。但并非所有 DBMS 产品都支持该运算符。
标签: sql null where-clause