在 MySQL 中仅选择非空值
Raymond Peter
2023年1月30日
2022年5月13日
本教程文章将向你展示如何在 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
,因为这是更好的做法。