#### 3.3.4.6 處理 NULL 值
在你習慣之前, `NULL` 值可能會讓你感到驚訝. 從概念上講, `NULL` 意味著“丟失的未知值”, 它的處理方法與其他值有些不同.
對 `NULL` 進行測試, 使用 [`IS NULL`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_is-null) 和 [`IS NOT NULL`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_is-not-null) 操作符, 如下所示:
```sql
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
```
不能使用算術比較運算符, 比如 [`=`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_equal), [`<`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_less-than), 或者 [`<>`](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_not-equal) 來測試 `NULL`. 演示這個, 嘗試以下查詢:
```sql
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
```
因為任何與 `NULL` 的算術運算符比較的結果也是 `NULL`, 所以你不能從這樣的比較中獲得任何有意義的結果.
在 MySQL 中, `0` 或者 `NULL` 是 false 并且其他任何值都是 true. 布爾運算默認真值為 `1`.
`NULL` 的特殊處理就是為什么在前一節中, 必須使用 `death IS NOT NULL` 而不是 `death <> NULL` 來確定哪些動物已經死亡.
在 `GROUP BY` 中, 兩個 `NULL` 值就被認為是相等的.
當執行 `ORDER BY` 時, 如果你執行 `ORDER BY ... ASC`, `NULL` 值將排在首位, 如果你執行 `ORDER BY ... DESC` 將排在末尾.
在處理 `NULL` 值是, 一個常見的錯誤是假設不可能將 0 或者空值插入到定義為 `NOT NULL` 的列中, 但事實并非如此. 它們實際上是值, 而 `NULL` 的意思是 “沒有值”. 你可以使用 `IS NOT NULL` 很容易進行測試, 如下所示:
```sql
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
```
因此完全有可能將0或者空字符串插入到 `NOT NULL` 列中, 因為這些列實際上是 `NOT NULL`. 參閱 [`Section B.4.4.3, “NULL 值得問題”`](https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html).
- 簡介
- 前言和法律條款
- 安裝和更新 MySQL
- 在 Linux 上安裝 MySQL
- 在 Linux 上使用 APT 庫安裝 MySQL
- 在 Linux 上使用 Docker 部署 MySQL
- 使用 Docker 部署 MySQL 服務器的基本步驟
- 使用 Docker 部署 MySQL 服務器的更多主題
- 教程
- 連接到服務器和從服務器斷開
- 輸入查詢
- 創建和使用數據庫
- 創建和選擇數據庫
- 創建表
- 將數據加載到表中
- 從表中檢索數據
- 選擇所有數據
- 選擇特定行
- 選擇指定列
- 行排序
- 日期計算
- 處理 NULL 值
- 模式匹配
- 計算行數
- 使用多個表
- 獲取數據庫和表的信息
- 在批處理模式使用 mysql
- 常見查詢示例
- 列的最大值
- 包含某一行最大值的記錄
- 每組中列的最大值
- 擁有某個字段的組間最大值的行
- 使用用戶自定義變量
- 使用外鍵
- 兩個鍵上搜索
- 計算每日訪問量
- 使用 AUTO_INCREMENT
- 在 Apache 中使用 MySQL
- MySQL 程序
- MySQL 客戶端程序
- mysql — MySQL 命令行客戶端
- 優化
- 優化概述
- 優化 SQL 語句
- 優化和索引
- 優化數據庫結構
- 優化 InnoDB 表
- 優化 MyISAM 表
- 優化 MEMORY 表
- 理解查詢執行計劃
- 控制查詢優化器
- 緩沖和緩存
- 優化鎖操作
- 優化 MySQL 服務器
- 測量性能 (Benchmarking)
- 檢查線程信息