定量谓词 (quantified predicate)
定量谓词 将一个或多个值与一组值进行比较。
注:
- 1 还支持其他比较运算符。 1
指定 expression 时,全查询必须返回单个结果列。 全查询可以返回任意数目的值,无论是否为空。 结果取决于指定的运算符:
- 指定 ALL 时,谓词的结果为:
- 如果 fullselect 的结果为空,或者如果指定的关系对于 fullselect 返回的每个值都为 true ,那么为 true。
- 如果指定的关系对于全查询返回的至少一个值为 false ,那么为 false。
- 如果指定的关系对于全查询返回的任何值都不为 false ,那么未知,并且由于空值,至少有一个比较未知。
- 指定 SOME 或 ANY 时,谓词的结果为:
- 如果指定的关系对于全查询返回的至少一个值为 true ,那么为 true。
- 如果 fullselect 的结果为空,或者如果指定的关系对于 fullselect 返回的每个值都为 false ,那么为 false。
- 对于全查询返回的任何值,如果指定的关系不为 true ,那么未知,并且由于空值,至少有一个比较未知。
指定 row-value-expression 时,全查询返回的结果列数必须与 row-value-expression指定的值表达式数相同。 全查询可以返回任意数量的值行。 行值表达式的相应表达式的数据类型必须兼容。 将来自 row-value-expression 的每个表达式的值与来自全查询的相应结果列的值进行比较。 在 fullselect的最外层选择列表中不允许 SELECT *。 谓词的值取决于指定的运算符:
- 指定 ALL 时,谓词的结果为:
- 如果 fullselect 的结果为空,或者对于 fullselect 返回的每行,指定的关系为 true ,那么为 true。
- 如果指定的关系对于全查询返回的至少一行为 false ,那么为 false。
- 如果指定的关系对于全查询返回的任何行都不为 false ,那么未知,并且由于空值,至少有一个比较未知。
- 指定 SOME 或 ANY 时,谓词的结果为:
- 如果指定的关系对于全查询返回的至少一行为 true ,那么为 true。
- 如果 fullselect 的结果为空,或者对于 fullselect 返回的每行,指定的关系为 false ,那么为 false。
- 对于全查询返回的任何行,如果指定的关系不为真,那么未知,并且由于空值,至少有一个比较未知。
如果谓词的相应操作数是 SBCS 数据,混合数据或 Unicode 数据,并且如果执行语句时有效的整理顺序不是 *HEX ,那么将使用操作数的加权值来执行操作数的比较。 加权值基于整理顺序。
示例
表 TBLA
COLA
-----
1
2
3
4
null表 TBLB
COLB
-----
2
3示例1
SELECT * FROM TBLA WHERE COLA = ANY(SELECT COLB FROM TBLB)结果为 2,3。 全查询返回 (2, 3)。 行 2 和 3 中的 COLA 至少等于其中一个值。
示例2
SELECT * FROM TBLA WHERE COLA > ANY(SELECT COLB FROM TBLB)结果为 3,4。 全查询返回 (2, 3)。 行 3 和 4 中的 COLA 至少大于其中一个值。
示例3
SELECT * FROM TBLA WHERE COLA > ALL(SELECT COLB FROM TBLB)结果为 4。 全查询返回 (2, 3)。 行 4 中的 COLA 是唯一大于这两个值的 COLA。
示例 4
SELECT * FROM TBLA WHERE COLA > ALL(SELECT COLB FROM TBLB WHERE COLB<0)结果为 1,2,3,4 和 null。 全查询不返回任何值。 因此,对于 TBLA 中的所有行,谓词的结果均为 true。
示例 5
SELECT * FROM TBLA WHERE COLA > ANY(SELECT COLB FROM TBLB WHERE COLB<0)生成 空结果表。 全查询不返回任何值。 因此,对于 TBLA 中的所有行,谓词的结果为 false。
