MySQL IS NULL & IS NOT NULL 教程(附示例)

在 SQL 中,NULL 既是一种值,也是一个关键字。我们先来看看 NULL 值——

MySQL IS NULL & IS NOT NULL

NULL 作为值

简单来说,NULL 只是一个不存在数据的占位符。在对表执行插入操作时,有时会遇到某些字段的值不可用的情况。

为了满足真正关系数据库管理系统的要求,MySQL 使用 NULL 作为未提交值的占位符。下面的屏幕截图显示了 NULL 值在数据库中的外观。

Null as a Value

在我们进一步讨论之前,先来看一些关于 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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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 中执行上述脚本会产生以下错误——

NOT NULL Values

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 email
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 值。