3.7.4 对空值和布尔值的聚集
空值的存在给聚集运算的处理带来了麻烦。例如,假设instructor
关系中有些元组在salary
上取空值。考虑以下计算所有工资总额的查询:
1 | select sum(salary) |
由于一些元组在salary
上取空值,上述查询待求和的值中就包含了空值。
sum聚集函数会忽略集合中的某个空值
SQL
标准并不认为总和本身为null
,而是认为sum
运算符应忽略输入中的null
值。
聚集函数对空值和空集的处理
输入集合中带空值
的情况
- 除了
count(*)
外所有的聚集函数都忽略
输入集合中的空值。
输入值集合为空集
的情况
- 规定空集的
count
运算值为0
, - 其他所有聚集运算在输入为空集的情况下返回一个
空值
。
在一些更复杂的SQL
结构中空值的影响会更难以琢磨。
SQL:1999 中引入的boolean类型和some every聚集函数
- 在
SQL:1999
中引入了布尔数据类型(boolean
),它可以取true
、false
、unknown
三个值。 some
和every
这两个聚集函数可用来处理boolean
值的集合。
原文链接: 3.7.4 对空值和布尔值的聚集