SQL 空值
在 SQL 中,表中可能有一些记录没有每个字段的值或数据。这是可能的,因为在数据输入时信息不可用。因此 SQL 支持一个称为 NULL 的特殊值,用于表示可能未知或不适用于元组的属性值。如果没有用户定义的值,SQL 会在字段中放置一个 NULL 值。例如,地址的 Apartment_number 属性仅适用于公寓楼中的地址,而不适用于其他类型的住宅。
NULL 值的重要性:
- 重要的是要了解 NULL 值与零值不同。
- NULL 值用于表示缺失值,但它通常具有以下三种不同解释之一:
- 值未知(值存在但未知)
- 价值不可用(存在但故意隐瞒)
- 属性不适用(此元组未定义)
- 通常无法确定其中的含义是什么。因此,SQL 不区分 NULL 的不同含义。
NULL值的原理:
- 当实际值未知或值没有意义时,设置 NULL 值是合适的。
- 如果数据类型是数字,则 NULL 值不等于值 ZERO;如果数据类型是字符,则 NULL 值不等于空格。
- NULL 值可以插入到任何数据类型的列中。
- NULL 值将在任何表达式中计算 NULL。
- 假设如果任何列具有 NULL 值,则 UNIQUE、FOREIGN 键、CHECK 约束将被 SQL 忽略。
通常,每个 NULL 值都被认为与数据库中的每个其他 NULL 值不同。当比较操作中涉及 NULL 时,结果被认为是 UNKNOWN。因此,SQL 使用三值逻辑,其值为True、False和Unknown。因此,当使用逻辑连接词 AND、OR 和 NOT 时,需要定义三值逻辑表达式的结果。
如何测试 NULL 值?
SQL 允许检查属性值是否为 NULL 的查询。 SQL 使用IS和IS NOT ,而不是使用 = 或将属性值与 NULL 进行比较。这是因为 SQL 认为每个 NULL 值都与其他所有 NULL 值不同,因此不适合进行相等比较。
现在,考虑以下员工表,
假设如果我们找到没有 Super_ssn 的 Employee 的 Fname、Lname,那么查询将是:
询问
SELECT Fname, Lname FROM Employee WHERE Super_ssn IS NULL;
输出:
现在,如果我们找到拥有 Super_ssn 的员工数量的计数。
询问:
SELECT COUNT(*) AS Count FROM Employee WHERE Super_ssn IS NOT NULL;
输出: