日期:2014-01-22 浏览次数:20545 次
2.IN expression IN (subquery)
IN 的这种方式的右手边是一个圆括弧括起来的子查询, 它必须只前往一个字段。左手边表达式对子查询的结果的每一行进行一次计算和比较。 如果找到任何等于子查询行的情况,那么 IN 的结果就是"真"。 如果没有找到相等行,那么结果是"假"(包括子查询没有前往任何行的特殊例子)。
请留意如果左手边表达式生成 NULL,或者没有相等的右手边数值, 并且至少有一个右手边行生成 NULL,那么 IN 结构的结果将是 NULL,而不是假。 这个行为是遵照 SQL 处理布尔和 NULL 值组合时的规则定的。
和 EXISTS 一样,假设子查询将被完成运转完全是不明智的。 row_constructor IN (subquery) 这种方式的 IN 的左手边是一个行结构器,右手边是一个圆括弧括起来的子查询,它必须前往和左手边前往的行中表达式所构成的完全一样多的字段。 左手边表达式就子查询结果的每一行进行计算很比较。如果找到任意相等的子查询行,则 IN 的结果为"真"。如果没有找到相等行, 那么结果为"假"(包括子查询不前往行的特殊例子)。 通常,表达式或者子查询行里的 NULL 是按照 SQL 布尔表达式的普通规则进行组合的。 如果两个行对应的成员都是非空并且相等,那么认为这两行相等;如果任意对应成员为非空且不等,那么该两行不等; 否则这样的行比较的结果是未知(NULL)。如果所有行的结果要么是不等, 要么是 NULL,并且至少有一个 NULL,那么 IN 的结果是 NULL。
3.NOT IN expression NOT IN (subquery)
右手边是一个用圆括弧包围的子查询,它必须前往一个字段。左手边表达式就子查询结果的每一行进行计算和比较。如果只找到不相等的子查询行(包括子查询不前往行的特殊情况),那么NOT IN 的结果是"真"。 如果找到任何相等行,则结果为"假"。 请留意如果左手边表达式前往空,或者如果没有等于右手边的值,并且至少一个右手边行生成空, 那么 NOT IN 结构的结果将是空,而不是真。这是依据 SQL 对布尔和空值组合的普通规则制定的。
和 EXISTS 一样,假设子查询会完全结束是不明智的。 row_constructor NOT IN (subquery)NOT IN 的这种方式左手边是一个行结构器,其右手边是一个圆括弧括起来的子查询, 它必须前往和左手边表达式前往的行一样多的字段。 左手边表达式对子查询的结果的每一行进行一次计算和比较。 如果只出现不等于子查询行的情况,那么 NOT IN 的结果就是"真"。 (包括子查询没有前往任何行的特殊例子)。如果找到相等行,那么结果是"假"。
和通常一样,表达式或者子查询行里的 NULL 是按照 SQL 布尔表达式的普通规则进行组合的。 如果两个行对应的成员都是非空并且相等,那么认为这两行相等;如果任意对应成员为非空且不等,那么该两行不等; 否则这样的行比较的结果是未知(NULL)。如果所有行的结果要么是不等, 要么是 NULL,并且至少有一个 NULL,那么 NOT IN 的结果是 NULL。
4.ANY/SOMEexpression operator ANY (subquery)
expression operator SOME (subquery)
这种方式的 ANY 右手边是一个圆括弧括起来的子查询, 它必须前往一个字段。左手边表达式将使用给出的 operator对子查询的结果的每一行进行一次计算和比较。目前如果获得任何真值结果,那么 ANY 的结果就是"真"。 如果没有找到真值结果,那么结果是"假"(包括子查询没有前往任何行的特殊例子)。 SOME 是 ANY 的同意词。 IN 等效于 = ANY。
请留意如果没有任何成功并且至少有一个右手边行为该操作符结果生成 NULL, 那么 ANY 结构的结果将是NULL,而不是 FALSE。 这个行为是遵照 SQL 处理布尔和 NULL 值组合时的规则定的。
和 EXISTS 一样,假设子查询将被完成运转完全是不明智的。 row_constructor operator ANY (subquery)
row_constructor operator SOME (subquery)
这种方式的左手边是一个行结构器,右手边是一个圆括弧括起来的子查询, 它必须前往和左手边列表给出的表达式一样多的列。左手边表达式将使用给出的 operator对子查询的结果的每一行进行一次计算和比较。 目前,系统只允许使用 = 或 <> 操作符处理逐行的 ANY 结构。 如果分别找到相等或者不相等的行,那么 ANY 的结果就是 "真"。如果没有找到这样的行,那么结果是"假"(包括子查询没有前往任何行的特殊例子)。
通常,表达式或者子查询行里的 NULL 是按照 SQL 布尔表达式的普通规则进行组合的。 如果两个行对应的成员都是非空并且相等,那么认为这两行相等;如果任意对应成员为非空且不等,那么该两行不等; 否则这样的行比较的结果是未知(NULL)。如果至少有一个 NULL 行结果, 那么 ANY 的结果将是TRUE 或者 NULL。
5.ALL expression operator ALL(subquery)
ALL 的这种方式的右手边是一个圆括弧括起来的子查询, 它必须只前往一列。左手边表达式将使用给出的 operator对子查询的结果的每一行进行一次计算和比较。该操作符必须生成布尔结果.如果所有行的结果都为"真",(包括子查询没有前往任何行的特殊例子)。 那么 ALL 的结果就是"真"。如果没有存在任何假值结果,那么结果是"假"。
NOT IN 等效于 <> ALL。
请留意如果没有运算失败但是至少有一个右手边行为该操作符的结果生成