在本教程中,我们将介绍NULL概念,并演示如何使用SQL IS NULL
和IS NOT NULL
运算符来测试表达式是否为NULL
。
1. 什么是NULL?
NULL
在SQL中很特殊。 NULL
表示数据未知的值,可以简单理解为表示:不适用 或不存在的值。 换句话说,NULL
表示数据库中缺少数据。
例如,如果员工没有任何电话号码,可以将其存储为空字符串。 但是,如果在插入员工记录时不知道他的电话号码,我们将使用未知电话号码的NULL
值。
NULL
值是特殊的,因为任何与NULL
值的比较都不会导致true
或false
,但在第三个逻辑结果中:未知。
以下语句返回null
值。
SELECT NULL = 5;
NULL
值甚至不等于自身,如以下语句所示。
SELECT NULL = NULL;
在此示例中,结果为NULL
值。
不能使用比较运算符的等于(=
)将值与NULL
值进行比较。 例如,以下语句将不会产生正确的结果。
SELECT
employee_id, first_name, last_name, phone_number
FROM
employees
WHERE
phone_number = NULL;
2. IS NULL 和 IS NOT NULL 运算符
要确定表达式或列的值是否为NULL
,请使用IS NULL
运算符,如下所示:
expression IS NULL;
如果表达式的结果为NULL
,则IS NULL
运算符返回true
; 否则它返回false
。要检查表达式或列是否不为NULL
,请使用IS NOT
运算符:
expression IS NOT NULL;
如果表达式的值为NULL
,则IS NOT NULL
返回false
; 否则它返回true
;
3. SQL IS NULL和IS NOT NULL示例
在这些示例中,我们将使用示例数据库中的employees
表进行演示。
mysql> DESC employees;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | NO | PRI | NULL | auto_increment |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(100) | NO | | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | int(11) | NO | MUL | NULL | |
| salary | decimal(8,2) | NO | | NULL | |
| manager_id | int(11) | YES | MUL | NULL | |
| department_id | int(11) | YES | MUL | NULL | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
要查找没有电话号码的所有员工,请使用IS NULL
运算符,如下所示:
要查找具有电话号码的所有员工,请使用IS NOT NULL
,如以下语句所示:
SELECT
employee_id,
first_name,
last_name,
phone_number
FROM
employees
WHERE
phone_number IS NOT NULL;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+----------------+
| employee_id | first_name | last_name | phone_number |
+-------------+------------+-----------+----------------+
| 100 | Steven | Lee | 0532-86011111 |
| 101 | Neena | Wong | 0551-4243311 |
| 102 | Lex | Liang | 0571-87622362 |
| 103 | Alexander | Lee | 020-95105105 |
| 104 | Bruce | Wong | 0371-68356666 |
| 105 | David | Liang | 0512-67513131 |
| 106 | Valli | Chen | 0535-95105175 |
| 107 | Diana | Chen | 025-95105105 |
| 108 | Nancy | Chen | 0531-86012520 |
| 109 | Daniel | Chen | 021-8008207890 |
... ...
| 201 | Michael | Zhou | 010-67237328 |
| 202 | Pat | Zhou | 0755-28114518 |
| 203 | Susan | Zhou | 0755-83587526 |
| 204 | Hermann | Wu | 0513-83512816 |
| 205 | Shelley | Wu | 0898-31686222 |
| 206 | William | Wu | 022-26144822 |
+-------------+------------+-----------+----------------+
34 rows in set
通过本小节的学习,现在您应该了解NULL
概念并知道如何使用SQL IS NULL
运算符来检查值是否为NULL
值。
上一篇:
SQL Like运算符
下一篇:
SQL Not运算符