MySQL IS NULL & IS NOT NULL 教程(附示例)
在 SQL 中,NULL 既是一种值,也是一个关键字。我们先来看看 NULL 值——
NULL 作为值
简单来说,NULL 只是一个不存在数据的占位符。在对表执行插入操作时,有时会遇到某些字段的值不可用的情况。
为了满足真正关系数据库管理系统的要求,MySQL 使用 NULL 作为未提交值的占位符。下面的屏幕截图显示了 NULL 值在数据库中的外观。
在我们进一步讨论之前,先来看一些关于 NULL 的基础知识。
- NULL 不是一种数据类型——这意味着它不被识别为“int”、“date”或任何其他已定义的数据类型。
- 涉及 NULL 的算术运算总是返回 NULL,例如,69 + NULL = NULL。
- 所有聚合函数仅影响没有 NULL 值的行。
现在我们来演示一下 count 函数如何处理 NULL 值。我们来看看 members 表的当前内容——
SELECT * FROM `members`;
执行上述脚本会得到以下结果
membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
我们来计算所有更新了 contact_number 的成员
SELECT COUNT(contact_number) FROM `members`;
执行上述查询会得到以下结果。
COUNT(contact_number) |
---|
7 |
注意:NULL 值未被包含
什么不是?
NOT 逻辑运算符用于测试布尔条件,如果条件为 false,则返回 true。如果被测试的条件为 true,则 NOT 运算符返回 false。
条件 | NOT 运算符结果 |
---|---|
真 | 假 |
假 | 真 |
为什么使用 NOT null?
有时我们需要对查询结果集执行计算并返回这些值。对包含 NULL 值的列执行任何算术运算都会返回 NULL 结果。为了避免这种情况发生,我们可以使用 NOT NULL 子句来限制数据操作的结果集。
NOT NULL 值
假设我们要创建一个表,其中某些字段在插入新行时必须始终提供值。我们可以在创建表时对给定字段使用 NOT NULL 子句。
下面显示的示例创建了一个包含员工数据的新表。应始终提供员工编号。
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
现在我们尝试插入一条新记录而不指定员工姓名,看看会发生什么。
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
在 MySQL workbench 中执行上述脚本会产生以下错误——
NULL 关键字
当对包含 NULL 的值执行布尔运算时,NULL 也可以用作关键字。“IS/NOT”关键字用于此目的。当 NULL 用作关键字时的基本语法如下:
`comlumn_name' IS NULL `comlumn_name' NOT NULL
HERE
- “IS NULL”是执行布尔比较的关键字。如果提供的值是 NULL,则返回 true;如果提供的值不是 NULL,则返回 false。
- “NOT NULL”是执行布尔比较的关键字。如果提供的值不是 NULL,则返回 true;如果提供的值是 NULL,则返回 false。
现在让我们看一个使用 NOT NULL 关键字来消除所有具有 NULL 值的列值的实际示例。
继续上面的示例,假设我们需要详细说明联系电话不为 null 的成员。我们可以执行如下查询:
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
执行上述查询将仅返回联系电话不为 NULL 的记录。
假设我们想要联系电话为 NULL 的成员记录。我们可以使用以下查询:
SELECT * FROM `members` WHERE contact_number IS NULL;
执行上述查询将返回联系电话为 NULL 的成员详细信息。
membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
比较 NULL 值
三值逻辑——对涉及 NULL 的条件执行布尔运算可能会返回“未知”、“真”或“假”。
例如,在进行涉及 NULL 的比较运算时使用“IS NULL”关键字,可能会返回真或假。使用其他比较运算符将返回“未知”(NULL)。
假设您将数字五与 5 进行比较
SELECT 5 =5;
查询结果为 1,表示 TRUE
5 =5 |
---|
1 |
我们对 NULL 进行相同的操作
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
我们来看另一个例子
SELECT 5 > 5;
5 > 5 |
---|
0 |
查询结果为 0,表示 FALSE
我们来看使用 NULL 的相同示例
SELECT NULL > NULL;
NULL > NULL |
---|
NULL |
我们使用 IS NULL 关键字
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
查询结果为 0,即 FALSE
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
查询结果为 1,即 TRUE
摘要
- NULL 是可选表字段的值占位符。
- MySQL 将 NULL 值与其他数据类型区别对待。NULL 值在条件中使用时,计算结果为 false 布尔值。
- NOT 逻辑运算符用于测试布尔值,如果布尔值为 false,则计算结果为 true;如果布尔值为 true,则计算结果为 false。
- NOT NULL 子句用于从结果集中消除 NULL 值。
- 对 NULL 值执行算术运算总是返回 NULL 结果。
- 比较运算符(如 [, =, 等])不能用于比较 NULL 值。