MySQL IS NULL 和 IS NOT NULL 教程及示例

在 SQL 中,Null 既是值,也是关键字。让我们首先研究一下 NULL 值 –

MySQL 为空 & 不为空

Null 作为值

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

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

Null 作为值

在进一步讨论之前,让我们先了解一下 NULL 的一些基础知识。

  • NULL 不是数据类型 – 这意味着它不被识别为“int”、“date”或任何其他定义的数据类型。
  • 算术运算 涉及 时刻 返回 NULL 例如,69 + NULL = NULL。
  • 全部 聚合函数 仅影响没有 NULL 值的行.

现在让我们演示一下 count 函数如何处理空值。让我们看看成员表的当前内容 -

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 逻辑运算符用于测试布尔条件,如果条件为假,则返回 true。如果测试的条件为真,则 NOT 运算符返回 false

Condition 不是 Opera结果

为什么要使用NOT 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 工作台出现以下错误-

NOT NULL 值

NULL 关键字

当对包含 NULL 的值执行布尔运算时,NULL 也可以用作关键字。为此目的,“IS/NOT”关键字与 NULL 字一起使用。将 null 用作关键字时的基本语法如下

`comlumn_name'  IS NULL
`comlumn_name' NOT NULL

点击这里

  • “一片空白 是执行布尔比较的关键字。如果提供的值为 NULL,则返回 true;如果提供的值不为 NULL,则返回 false。
  • “非空”是执行布尔比较的关键字。如果提供的值不为 NULL,则返回 true;如果提供的值是 null,则返回 false。

现在让我们看一个实际的例子,使用NOT NULL关键字来消除所有具有空值的列值。

继续上面的例子,假设我们需要联系电话不为空的会员的详细信息。我们可以执行如下查询

SELECT * FROM `members` WHERE contact_number IS NOT 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 的条件执行布尔运算可以返回 “未知”、“真”或“假”。

例如, 使用“IS NULL”关键字 进行比较运算时 涉及 NULL 可以返回 true or false. 使用其他比较运算符返回 “未知”(NULL)。

假设你将数字 5 与 XNUMX 进行比较

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 值在条件中使用时,计算结果为假布尔值。
  • NOT 逻辑运算用于测试布尔值,如果布尔值为假,则计算结果为真,如果布尔值为真,则计算结果为假。
  • NOT NULL 子句用于从结果集中消除 NULL 值
  • 对 NULL 值执行算术运算总是返回 NULL 结果。
  • 不能使用 [、= 等比较运算符来比较 NULL 值。