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
子句中过滤指定条件行。