在 MySQL 中僅選擇非空值
Raymond Peter
2023年1月30日
本教程文章將向你展示如何在 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
,因為這是更好的做法。