何时使用空值或默认值
在某些情况下,使用空值比使用默认值更容易、更好。
假设您想了解一个部门所有员工的平均工资。 工资栏不一定需要填写有意义的数值,因此您可以从以下选项中选择:
- 允许工资列为空值
- 使用非空默认值(例如0)
通过允许空值,您可以轻松地制定查询, Db2 提供所有已知或记录的工资的平均值。 计算不包括包含空值的行。 在第二种情况下,除非您知道未知工资的非零默认值并据此提出查询,否则您可能会得到一个误导性的答案。
下图显示了两种情况。 图中表格不包括员工编号为200440的工资数据,因为公司刚刚雇佣了该员工,尚未确定工资。 部门 E21 的平均薪资计算方法有所不同,取决于您使用的是空值还是非空默认值。
- 图左侧假设您使用空值。 在这种情况下,部门 E21 的平均薪资计算仅包括三名员工(000320、000330和200340),因为他们的薪资数据可用。
- 图右侧假设您使用非零的默认值(0)。 在这种情况下,部门 E21 的平均薪资计算包括所有四名员工,尽管只有三名员工有有效的薪资信息。
如您所见,只有使用空值才能得出部门 E21 的准确平均工资。
在大多数情况下,空值是不同的,因此两个空值彼此不相等。
示例
下面的示例演示了如何比较两列,以查看它们是否相等或两列是否都为空:
WHERE E1.DEPT IS NOT DISTINCT FROM E2.DEPT