PostgreSQL ALL 运算符的用法与实例

本文介绍了在 PostgreSQL 中如何在使用 ALL 运算符将一个值与一个子查询返回的所有的值进行比较。

有时候,您需要将一个值与一个列表中的所有值进行比较,比如:

  • 给定一个工资值。您需要确认这个值是否高于所有员工的工资。
  • 给定一个状态值。您需要确定这个状态值是否不等于所有状态值中的任意一个。

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

PostgreSQL ALL 运算符用于将一个值与一个值列表进行比较,如果值列表中的所有值满足了指定的条件,表达式就返回真,否则表达式返回假。

PostgreSQL ALL 语法

将一个值与一个子查询返回的所有的值进行比较,请按下面的语法使用 ALL 运算符:

comparison_operator ALL (array)

这里:

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

例如:

  • value = ALL (array): 如果列表中的所有的值等于 value,该表达式返回 true, 否则返回 false
  • value > ALL (array): 如果列表中的所有的值小于 value,该表达式返回 true, 否则返回 false
  • value < ALL (array): 如果列表中的所有的值大于 value,该表达式返回 true, 否则返回 false
  • value <> ALL (array): 如果列表中的所有的值不等于 value,该表达式返回 true, 否则返回 false

您可以在 WHERE 子句中按照如下方式使用 ALL 运算符:

WHERE expr1 > ALL (subquery)

如果子查询不返回任何行,则 ALL 运算符的计算结果始终为真。

PostgreSQL ALL 运算符实例

PostgreSQL ALL 与数组

我们经常需要检查一个数组中的所有元素是否都满足指定的条件,比如:

  • 要检查数组 [1, 2, 3] 中的所有元素是否都等于 2,请使用以下语句:

    SELECT 2 = ALL(ARRAY[1, 2, 3]);
    
     ?column?
    ----------
     f
  • 要检查数组 [1, 2, 3] 中的所有元素是否都大于等于 1,请使用以下语句:

    SELECT 1 <= ALL(ARRAY[1, 2, 3]);
    
    ?column?
    ----------
    t
  • 要检查数组 [1, 2, 3] 中的所有元素是否都不等于 0,请使用以下语句:

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

PostgreSQL ALL 与子查询

下面我们提供了一些实用的例子来展示 ALL 操作符的威力。

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

要判断一个值 99 是否比所有的影片的租金都要高,请使用下面的语句:

SELECT 99 > ALL (SELECT rental_rate FROM film);
 ?column?
----------
 t

要判断一个值 66 是否比所有的影片的租金都要小,请使用下面的语句:

SELECT 66 < ALL (SELECT rental_rate FROM film);
 ?column?
----------
 f

要查找大于等于所有的租金的影片的数量,请使用下面的语句:

SELECT count(*)
FROM film
WHERE rental_rate >= ALL (
    SELECT rental_rate
    FROM film
  );
 count
-------
   336

结论

PostgreSQL ALL 运算符用于将一个值与一个子查询返回的所有的值进行比较,并返回一个布尔值。 ALL 运算符可用于 WHERE 子句中过滤指定条件行。