ANY_SOME

ANY_SOME子查询表达式的第一种形式如下:

any ::=

ANY的这种形式的右手边是一个圆括弧括起来的子查询, 它必须只返回一列。左手边表达式将使用给出的operator对 子查询的结果的每一行进行一次计算和比较。 该操作符必须生成布尔结果。如果获得任何真值结果,那么 ANY 的结果就是 TRUE.如果没有找到真值结果,那么结果是 FALSE(包括子查询没有返回任何行的特殊例子)。

SOME 是 ANY 的同意词. IN 等效于 = ANY。

请注意如果没有任何成功并且至少有一个右手边行为该操作符结果生成 NULL,那么 ANY 构造的结果将是 NULL,而不是 FALSE.这个行为是遵照 SQL 处理布尔和 NULL 值组合时的规则定的。

和 EXISTS 一样,假设子查询将被运行完全是不明智的。

ANY_SOME子查询表达式的第二种形式如下:

any ::=

ANY_SOME的这种形式的右手边是一个圆括弧括起来的子查询,它必须返回和左手边列表给出的表达式一样多的列。左手边表达式将使用给出的operator对子查询的结果的每一行进行一次计算和比较。目前系统只允许使用 = 和<>操作符处理逐行的 ANY 查询。如果分别找到相等或者不相等的行,那么 ANY 的结果就是 TRUE。如果没有找到这样的行,那么结果是 FALSE(包括子查询没有返回任何行的特殊例子)。

通常,表达式或者子查询行里的NULL是按照SQL布尔表达式的一般规则进行组合的。如果两个行对应的成员都是非空并且相等,那么认为这两行相等;如果任意对应成员为非空且不等,那么该两行不等;否则这样的行比较的结果是未知(NULL)。如果至少有一个NULL行结果,那么ANY的结果将是TRUE 或者NULL。