有时,数据库管理员(DBA)需要提供一个或多个表中缺失值数量的报告。无论目标是显示计数还是缺少值的行内容,都有两种处理方法,具体取决于你想要的灵活性。第一种方法是使用具有的有关字段名、数据类型和约束的信息来构造针对所涉及表的查询。第二种更复杂的方法是编写一个存储过程,从 INFORMATION_SCHEMA.COLUMNS 表中获取列信息。在今天的文章中,我们将介绍一个非通用方法,而下周的文章将介绍存储过程解决方案。
显示可以为 null 的列
由于并非表中的每个字段都可以接受 null 值,因此检查表设计并查看哪些字段可能包含 null 值会很有帮助。在 Navicat 数据库开发和管理客户端中,表设计使用“不是 null”标头下的复选框标识所有必填列。因此,所有未勾选其复选框的列都可以包含 null 值。这些将是我们查询重点关注的字段:
查找具有 null 值的字段的其中一种方法是使用“查询创建工具”构建查询。我们可以从菜单中选择许多条件,包括“是 null”、“不是 null”、“是空的”、“不是空的”等。
构建完成后,我们可以将 SQL 直接插入编辑器中::
这是 customers 表的所有行,其中至少包含一列具有 null 值:
获取填充字段和空白字段的统计信息
在只需要统计填充字段和空白字段的情况下,可以使用 count() 函数统计填充字段或 null 字段。在以下查询中,百分比表示为包含该特定字段的空值的行数:
同样,我们可以计算并显示特定行的 null 列,由 customerNumber 标识:
在上面的查询中,使用 CASE 语句仅在计数中包括 null 值。这次,百分比(舍入为 2 位小数位数)显示了总共十四个表列中有多少个包含 null 值。
总结
在今天的文章中,我们学习了如何查询一个或多个表中的缺失值。下周的文章将介绍一种使用存储过程的更通用方法。同时,为了增加你的兴趣,以下是一个 SQL Server 查询。它从 INFORMATION_SCHEMA.COLUMNS 表中提取列元数据,以便为每个表生成查询:
上面的查询将返回 SELECT 查询的列表。然后,我们可以将它们复制并粘贴到 Navicat 查询编辑器中,并在 SELECT 之间使用“UNION”,以查找数据库中每个表中的缺失值!