在 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,因为这是更好的做法。