Null 值语义
以下内容描述 NULL 值的语义。
- 使用未知的 (NULL) 值进行比较或算术运算会得到未知的值
- 在 Java 2 platform, Enterprise Edition (J2EE) V1.3 应用程序中,路径表达式使用外连接语义,在该外连接语义中,NULL 字段或 cmr 值求值结果为 NULL。在 J2EE V1.4 中,路径表达式使用内连接语义。
- IS NULL 和 IS NOT NULL 运算符可以应用于路径表达式,并返回 TRUE 或 FALSE。布尔运算符 AND、OR 和 NOT 使用三个值的逻辑。
AND | True | False | 未知 |
---|---|---|---|
True | True | False | 未知 |
False | False | False | False |
未知 | 未知 | False | 未知 |
OR | True | False | 未知 |
---|---|---|---|
True | True | True | True |
False | True | False | 未知 |
未知 | True | 未知 | 未知 |
NOT | |
---|---|
True | False |
False | True |
未知 | 未知 |
示例:Null 值语义
select object(e) from EmpBean where e.salary > 10 and e.dept.budget > 100
如果月薪是 NULL,那么 e.salary > 10 的求值返回未知,且不返回职员对象。如果 cmr 字段 dept 或 budget 为 NULL,那么 e.dept.budget > 100 的求值返回未知,且不返回职员对象。
select object(e) from EmpBean where e.dept.budget is null
在 J2EE 1.3 中,如果 dept 或 budget 是 NULL,那么 e.dept.budget 为空值的求值返回 TRUE,并且返回职员对象。在 J2EE 1.4 中,仅当 budget 是 NULL 时才返回职员对象。
select object(e) from EmpBean e , in (e.dept.emps) e1 where e1.salary > 10
如果 dept 是 NULL,那么多值路径表达式 e.dept.emps 产生空的集合(不是包含 NULL 值的集合)。不会返回 dept 值为 null 的职员。
select object(e) from EmpBean e where e.dept.emps is empty
如果 dept 是 NULL,那么谓词的求值为未知,且不返回职员对象。
select object(e) from EmpBean e , EmpBean e1 where e member of e1.dept.emps
如果 dept 是 NULL,那么谓词的成员的求值返回未知,且不返回职员。