SQL Is Null運算符

在本教程中,我們將介紹NULL概念,並演示如何使用SQL IS NULLIS NOT NULL運算符來測試表達式是否爲NULL

1. 什麼是NULL?

NULL在SQL中很特殊。 NULL表示數據未知的值,可以簡單理解爲表示:不適用不存在的值。 換句話說,NULL表示數據庫中缺少數據。

例如,如果員工沒有任何電話號碼,可以將其存儲爲空字符串。 但是,如果在插入員工記錄時不知道他的電話號碼,我們將使用未知電話號碼的NULL值。

NULL值是特殊的,因爲任何與NULL值的比較都不會導致truefalse,但在第三個邏輯結果中:未知

以下語句返回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運算符,如下所示:

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