定量谓词 (quantified predicate)

定量谓词 将一个或多个值与一组值进行比较。

读取语法图跳过可视语法图表达式 =  <>  <  >  <=  >= 1SOMEANYALL(全查询)行值表达式 = SOMEANY(全查询)行值表达式 <> ALL(全查询)
注:
  • 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。