在本教學中,我們將介紹NULL概念,並演示如何使用SQL IS NULL
和IS NOT NULL
運算子來測試表示式是否為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;
要確定表示式或列的值是否為NULL
,請使用IS NULL
運算子,如下所示:
expression IS NULL;
如果表示式的結果為NULL
,則IS NULL
運算子返回true
; 否則它返回false
。要檢查表示式或列是否不為NULL
,請使用IS NOT
運算子:
expression IS NOT NULL;
如果表示式的值為NULL
,則IS NOT NULL
返回false
; 否則它返回true
;
在這些範例中,我們將使用範例資料庫中的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
值。