在 MySQL 中僅選擇非空值

Raymond Peter 2023年1月30日 2022年5月13日
  1. 瞭解 MySQL 中的 Null 值
  2. 在 MySQL 中使用 WHERE NOT<=> 僅選擇非 Null 值
在 MySQL 中僅選擇非空值

本教程文章將向你展示如何在 MySQL 中編寫一個 select 語句,該語句從特定列中刪除所有空值。

瞭解 MySQL 中的 Null 值

NULL 值幫助我們知道任何表的哪些部分是空的,並允許我們適當地處理它們。

從表中刪除空行或空列的原因很大程度上取決於你要查詢的內容,但一個很好的例子是當你需要表中特定列的資料時,如果一行返回為 NULL,則沒有用閱讀該資訊。

在處理大型表時,刪除空值可以節省時間並減少所需的計算。

你可以通過在初始指令碼中包含 IS NOT NULL 條件來簡化過程,而不是編寫一個指令碼來從表中查詢,然後編寫另一個指令碼來遍歷資料並查詢空值。

SELECT * FROM 'table name'
WHERE 'column name' IS NOT NULL;

結果將是完整的表,其中沒有基於指定列的具有 NULL 值的行。

下面的示例採用奧爾巴尼的郵政編碼列表以及每側的類別,以區分輸入正確的郵政編碼和有錯別字的郵政編碼:

| code   | cd_check |
| -------|----------|
| NULL   |   true   |
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12359  |   NULL   |
| 12227  |   true   |

要僅刪除 cd_check 列中具有 NULL 值的行,請應用以下程式碼:

CREATE TABLE albany (
  code INTEGER,
  cd_check TEXT 
);

INSERT INTO albany VALUES (NULL,"true");
INSERT INTO albany VALUES (12649,"false");
INSERT INTO albany VALUES (12248,"true");
INSERT INTO albany VALUES (12239,"true");
INSERT INTO albany VALUES (12359,NULL);
INSERT INTO albany VALUES (12227,"true");

SELECT code, cd_check FROM albany
WHERE cd_check IS NOT NULL;

結果:

| code   | cd_check |
| -------|----------|
| NULL   |   true   |
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12227  |   true   |

上面返回的表在 cd_check 列中沒有包含 NULL 值的行。但是,由於只指定了一列,具有 NULL 值的行仍保留在程式碼列下。

你可以通過新增 AND 語句從多個列中刪除行。該語句將檢查兩列並返回以下內容:

| code   | cd_check |
| -------|----------|
| 12649  |   false  | 
| 12248  |   true   |
| 12239  |   true   |
| 12227  |   true   |

包含空值的兩行均已從表中刪除。

在 MySQL 中使用 WHERE NOT<=> 僅選擇非 Null 值

你可以使用以下替代方法,而不是在指令碼中放置 IS NOT NULL

WHERE NOT<=>,當 WHERE 後跟 NOT 時,比較運算子替換 IS NOT

例子:

SELECT code, cd_check FROM albany
WHERE NOT cd_check <=> NULL;

雖然這也可行,但最好使用 IS NOT NULL,因為這是更好的做法。