PostgreSQL 教程: ALL 运算符

九月 3, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的 ALL 运算符将值与子查询返回的值列表进行比较。

PostgreSQL ALL 运算符概述

PostgreSQL ALL 运算符允许您通过将值与子查询返回的值列表进行比较来查询数据。

下面说明了 ALL 运算符的语法:

comparison_operator ALL (subquery)

在这个语法中:

  • ALL 运算符前面必须有比较运算符,例如等于 (=)、不等于 (!=)、大于 (>)、大等于 (>=)、小于 (<) 和小等于 (<=)。
  • ALL 运算符后面必须跟一个子查询,子查询也必须用括号括起来。

假设子查询返回一些行,ALL 运算符的工作原理如下:

  1. column_name > ALL (subquery) 如果column_name的值大于子查询返回的最大值,则表达式的计算结果为 true。
  2. column_name >= ALL (subquery) 如果column_name的值大等于子查询返回的最大值,则表达式的计算结果为 true。
  3. column_name < ALL (subquery) 如果column_name的值小于子查询返回的最小值,则表达式的计算结果为 true。
  4. column_name <= ALL (subquery) 如果column_name的值小等于子查询返回的最小值,则表达式计算结果为 true。
  5. column_name = ALL (subquery) 如果column_name的值等于子查询返回的任何值,则表达式的计算结果为 true。
  6. column_name != ALL (subquery) 如果column_name的值不等于子查询返回的任何值,则表达式的计算结果为 true。

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

PostgreSQL ALL 运算符示例

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

PostgreSQL ALL: Film table

以下查询返回按电影评级分组的所有电影的平均长度:

SELECT
    ROUND(AVG(length), 2) avg_length
FROM
    film
GROUP BY
    rating
ORDER BY
    avg_length DESC;

PostgreSQL ALL Example

要查找长度大于上述平均长度列表的所有影片,请使用 ALL 和大于运算符 (>),如下所示:

SELECT
    film_id,
    title,
    length
FROM
    film
WHERE
    length > ALL (
            SELECT
                ROUND(AVG (length),2)
            FROM
                film
            GROUP BY
                rating
    )
ORDER BY
    length;

PostgreSQL ALL with greater than operator example

从输出中可以清楚地看到,查询返回长度大于子查询返回的平均长度列表中最大值的所有电影。

在本教程中,您学习了如何使用 PostgreSQL 的 ALL 运算符将值与子查询返回的值列表进行比较。