PostgreSQL ANY 运算符的用法与实例

本文介绍了在 PostgreSQL 中如何在使用 ANY 运算符检查一个子查询返回的一组值中是否至少存在一个值满足指定的条件。

有时候,你需要检查一个列表中是否至少有一个满足指定条件的值,比如:

  • 检查一个列表中是否包含了一个指定的值的元素。
  • 检查一个列表中是否有一个大于或者小于一个指定值的元素。
  • 检查一个班级的考试成绩是否有满分。

您可以使用 PostgreSQL ANY 运算符来解决这些问题。

PostgreSQL ANY 运算符用于将一个值与一个值列表进行比较,只要值列表中有一个值满足指定的条件就返回真,否则返回假。

在 PostgreSQL 中, SOME 操作符是 ANY 的同义词。 您可以使用 SOME 关键字代替 ANY

PostgreSQL ANY 语法

要检查一个数组中是否至少存在一个满足条件的值,请按下面的语法使用 ANY 运算符:

comparison_operator ANY (array)

这里:

  • comparison_operator 是一个比较运算符,例如 =, !=, >, >=, <, <= 等。
  • array 是一个数组或者子查询,它跟在 ANY 运算符后面。子查询必须用括号括起来。
  • 如果 array 中至少有一个值满足指定的条件,则表达式返回真,否则表达式返回假。

例如:

  • value = ANY (array): 只要数组中有一个等于 value 的值,该表达式返回 true, 否则返回 false
  • value > ANY (array): 只要数组中有一个小于 value 的值,该表达式返回 true, 否则返回 false
  • value < ANY (array): 只要数组中有一个大于 value 的值,该表达式返回 true, 否则返回 false
  • value <> ANY (array): 只要数组中有一个不等于 value 的值,该表达式返回 true, 否则返回 false

PostgreSQL ANY 实例

PostgreSQL ANY 与数组

我们经常需要检查一个数组中是否至少包含一个满足条件的元素,比如:

  • 要检查数组 [1, 2, 3] 是否包含一个值为 2 的元素,请使用以下语句:

    SELECT 2 = ANY(ARRAY[1, 2, 3]);
    
    ?column?
    ----------
    t
  • 要检查数组 [1, 2, 3] 是否包含一个值大于 2 的元素,请使用以下语句:

    SELECT 2 < ANY(ARRAY[1, 2, 3]);
    
    ?column?
    ----------
    t
  • 要检查数组 [1, 2, 3] 是否包含一个值大于 3 的元素,请使用以下语句:

    SELECT 3 < ANY(ARRAY[1, 2, 3]);
    
    ?column?
    ----------
    f

    这里,因为 [1, 2, 3] 所有元素都不大于 3,因此表达式返回了 false

  • 要检查数组 [1, 2, 3] 是否包含一个值不等于 3 的元素,请使用以下语句:

    SELECT 3 <> ANY(ARRAY[1, 2, 3]);
    
    ?column?
    ----------
    t

PostgreSQL ANY 与子查询

PostgreSQL ANY 运算符结合子查询会产生更大的威力。

让我们使用 PostgreSQL Sakila 示例数据库中的 film进行演示。

  • 要检查是否存在租金高于 5 美元的影片,请使用下面的 ANY 语句:

    SELECT 5 < ANY (SELECT rental_rate FROM film);
    
    ?column?
    ----------
    f

    这里,请注意子查询:

    SELECT rental_rate FROM film
    

    它返回了所有影片你的租金。只要 5 小于所有租金的中的一个,则代表影片表中存在租金大于 5 美元的影片。

    最终,表达式返回了 false,这说明了 film 表中没有租金大于 5 美元的影片。

  • 要检查是否能用 1 美元租到影片,请使用以下语句:

    SELECT 1 >= ANY (SELECT rental_rate FROM film);
    
    ?column?
    ----------
    t

    要判断能否用 1 美元租到影片,就是判断是否存在租金小于等于 1 美元。

    表达式返回了 false,这说明了 film 表中有租金小于等于 1 美元的影片。也就是,您可以是使用 1 美元租到影片。

结论

PostgreSQL ANY 运算符用于将一个值与一个值列表进行比较,只要值列表中有一个值满足指定的条件就返回真,否则返回假。 ANY 运算符可用于 WHERE 子句中过滤指定条件行。