暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB SQL 数组表达式

原创 由迪 2022-09-13
330

IN

expression IN (value [, …])

右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果列表中的内容符合左侧表达式的结果,则IN的结果为true。如果没有相符的结果,则IN的结果为false。

示例如下:

MogDB=# SELECT 8000+500 IN (10000, 9000) AS RESULT; result ---------- f (1 row)

如果表达式结果为null,或者表达式列表不符合表达式的条件且右侧表达式列表返回结果至少一处为空,则IN的返回结果为null,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。

NOT IN

expression NOT IN (value [, …])

右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果在列表中的内容没有符合左侧表达式结果的内容,则NOT IN的结果为true。如果有符合的内容,则NOT IN的结果为false。

示例如下:

MogDB=# SELECT 8000+500 NOT IN (10000, 9000) AS RESULT; result ---------- t (1 row)

如果查询语句返回结果为空,或者表达式列表不符合表达式的条件且右侧表达式列表返回结果至少一处为空,则NOT IN的返回结果为null,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。

img 说明: 在所有情况下X NOT IN Y等价于NOT(X IN Y)。

ANY/SOME (array)

expression operator ANY (array expression)_

expression operator SOME (array expression)_

MogDB=# SELECT 8000+500 < SOME (array[10000,9000]) AS RESULT; result ---------- t (1 row) MogDB=# SELECT 8000+500 < ANY (array[10000,9000]) AS RESULT; result ---------- t (1 row)

右侧括号中的是一个数组表达式,它必须产生一个数组值。左侧表达式的结果使用操作符对数组表达式的每一行结果都进行计算和比较,比较结果必须是布尔值。

  • 如果对比结果至少获取一个真值,则ANY的结果为true。
  • 如果对比结果没有真值,则ANY的结果为false。
  • 如果结果没有真值,并且数组表达式生成至少一个值为null,则ANY的值为NULL,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。

img 说明: SOME是ANY的同义词。

ALL (array)

expression operator ALL (array expression)

右侧括号中的是一个数组表达式,它必须产生一个数组值。左侧表达式的结果使用操作符对数组表达式的每一行结果都进行计算和比较,比较结果必须是布尔值。

  • 如果所有的比较结果都为真值(包括数组不含任何元素的情况),则ALL的结果为true。

  • 如果存在一个或多个比较结果为假值,则ALL的结果为false。

  • 如果数组表达式产生一个NULL数组,则ALL的结果为NULL。如果左边表达式的值为NULL ,则ALL的结果通常也为NULL(某些不严格的比较操作符可能得到不同的结果)。另外,如果右边的数组表达式中包含null元素并且比较结果没有假值,则ALL的结果将是NULL(某些不严格的比较操作符可能得到不同的结果), 而不是真。这样的处理方式和SQL返回空值的布尔组合规则是一致的。

    MogDB=# SELECT 8000+500 < ALL (array[10000,9000]) AS RESULT; result ---------- t (1 row)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论