3.7.4 对空值和布尔值的聚集

3.7.4 对空值和布尔值的聚集

空值的存在给聚集运算的处理带来了麻烦。例如,假设instructor关系中有些元组在salary上取空值。考虑以下计算所有工资总额的查询:

1
2
select sum(salary)
from instructor;

由于一些元组在salary上取空值,上述查询待求和的值中就包含了空值。

sum聚集函数会忽略集合中的某个空值

SQL标准并不认为总和本身为null,而是认为**sum运算符应忽略输入中的null值**。

聚集函数对空值和空集的处理

输入集合中带空值的情况

  • 除了count(*)外所有的聚集函数都忽略输入集合中的空值。

输入值集合为空集的情况

  • 规定空集的count运算值为0,
  • 其他所有聚集运算在输入为空集的情况下返回一个空值

在一些更复杂的SQL结构中空值的影响会更难以琢磨。

SQL:1999 中引入的boolean类型和some every聚集函数

  • SQL:1999中引入了布尔数据类型(boolean),它可以取truefalseunknown三个值。
  • someevery这两个聚集函数可用来处理boolean值的集合。