九月 4, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的ANY
运算符将标量值与子查询返回的一组值进行比较。
目录
PostgreSQL ANY 运算符简介
PostgreSQL 的ANY
运算符将一个值与子查询返回的一组值进行比较。下面说明了ANY
运算符的语法:
expresion operator ANY(subquery)
在这个语法中:
- 子查询必须恰好返回一列。
ANY
运算符前面必须有以下比较运算符之一:=、<=、>、<、> 和 <>。- 如果子查询的任何值满足条件,则
ANY
运算符返回 true,否则返回 false。
请注意,SOME
是ANY
的同义词,这意味着您可以在任何 SQL 语句中使用SOME
替换ANY
。
PostgreSQL ANY 示例
我们将使用示例数据库中的film
和film_category
表进行演示,如下。
以下示例返回按影片类别分组的影片的最大长度:
SELECT
MAX( length )
FROM
film
INNER JOIN film_category
USING(film_id)
GROUP BY
category_id;
您可以将此查询用作以下语句中的子查询,该语句查找长度大等于任何电影类别最大长度的电影:
SELECT title
FROM film
WHERE length >= ANY(
SELECT MAX( length )
FROM film
INNER JOIN film_category USING(film_id)
GROUP BY category_id );
结果如下:
对于每个电影类别,子查询查找最大长度。外部查询查看所有这些值,并确定哪部电影的长度大等于任何电影类别的最大长度。
请注意,如果子查询不返回任何行,则整个查询将返回空结果集。
ANY 对比 IN
= ANY
相当于运算符 IN。
以下示例获取类别为Action
或Drama
的电影。
SELECT
title,
category_id
FROM
film
INNER JOIN film_category
USING(film_id)
WHERE
category_id = ANY(
SELECT
category_id
FROM
category
WHERE
NAME = 'Action'
OR NAME = 'Drama'
);
结果是:
以下语句使用产生相同结果的IN
运算符:
SELECT
title,
category_id
FROM
film
INNER JOIN film_category
USING(film_id)
WHERE
category_id IN(
SELECT
category_id
FROM
category
WHERE
NAME = 'Action'
OR NAME = 'Drama'
);
请注意,<> ANY
运算符与NOT IN
不同。下面的表达式:
x <> ANY (a,b,c)
相当于
x <> a OR <> b OR x <> c
在本教程中,您学习了如何使用 PostgreSQL 的ANY
运算符,将值与子查询返回的一组值进行比较。