在 MySQL 中仅选择非空值

本教程文章将向你展示如何在 MySQL 中编写一个 select 语句,该语句从特定列中删除所有空值。

了解 MySQL 中的 Null 值

NULL 值帮助我们知道任何表的哪些部分是空的,并允许我们适当地处理它们。

从表中删除空行或空列的原因很大程度上取决于你要查找的内容,但一个很好的例子是当你需要表中特定列的数据时,如果一行返回为 NULL,则没有用阅读该信息。

在处理大型表时,删除空值可以节省时间并减少所需的计算。

你可以通过在初始脚本中包含 IS NOT NULL 条件来简化过程,而不是编写一个脚本来从表中查询,然后编写另一个脚本来遍历数据并查找空值。

SELECT*FROM'table name'WHERE'column name'ISNOTNULL;

结果将是完整的表,其中没有基于指定列的具有 NULL 值的行。

下面的示例采用奥尔巴尼的邮政编码列表以及每侧的类别,以区分输入正确的邮政编码和有错别字的邮政编码:

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

要仅删除 cd_check 列中具有 NULL 值的行,请应用以下代码:

CREATETABLEalbany(codeINTEGER,cd_checkTEXT);INSERTINTOalbanyVALUES(NULL,"true");INSERTINTOalbanyVALUES(12649,"false");INSERTINTOalbanyVALUES(12248,"true");INSERTINTOalbanyVALUES(12239,"true");INSERTINTOalbanyVALUES(12359,NULL);INSERTINTOalbanyVALUES(12227,"true");SELECTcode,cd_checkFROMalbanyWHEREcd_checkISNOTNULL;

结果:

| 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

例子:

SELECTcode,cd_checkFROMalbanyWHERENOTcd_check<=>NULL;

虽然这也可行,但最好使用 IS NOT NULL,因为这是更好的做法。