PostgreSQL - ANY 运算符
PostgreSQL ANY 运算符
Section titled “PostgreSQL ANY 运算符”PostgreSQL 中的 ANY 运算符是一个强大的工具,用于将标量值与一组值进行比较,这组值可以由数组或子查询提供。它简化了那些原本需要多个 OR 条件的查询。
ANY 运算符在比较集合中至少一个值为真时返回 TRUE。如果对所有值都为假或集合为空时,它返回 FALSE。
ANY 运算符在标准比较运算符(=、<>、<、>、<=、>=)之后使用:
scalar_expression operator ANY (array_expression)-- 或scalar_expression operator ANY (subquery)= ANY(...) 结构等同于 IN 运算符,但 ANY 可以与任何比较运算符一起使用,使其更加通用。
ANY 运算符示例
Section titled “ANY 运算符示例”让我们创建一个表来管理求职者及其技能和测试分数。这是数组数据类型和 ANY 运算符的完美用例。
CREATE TABLE candidates( id SERIAL PRIMARY KEY, name TEXT NOT NULL, skills TEXT[], scores INT[]);
INSERT INTO candidates(name, skills, scores) VALUES('Alice', ARRAY['Python', 'SQL', 'GCP'], ARRAY[85, 90, 75]),('Bob', ARRAY['Java', 'PostgreSQL'], ARRAY[70, 80, 95]),('Charlie', ARRAY['Go', 'SQL', 'Docker'], ARRAY[65, 75, 85]),('Diana', ARRAY['C++', 'Python'], ARRAY[80, 85, 90]);用例 1:查找具有特定技能的求职者
Section titled “用例 1:查找具有特定技能的求职者”我们想找到所有将“SQL”列为其中一项技能的求职者。使用 ANY 比尝试对照数组的文本表示进行匹配要清晰得多。
SELECT name, skillsFROM candidatesWHERE 'SQL' = ANY(skills);此查询产生以下输出:
| 姓名 | 技能 |
|---|---|
| Alice | {Python,SQL,GCP} |
| Charlie | {Go,SQL,Docker} |
用例 2:检查最低分数
Section titled “用例 2:检查最低分数”现在,让我们找出在至少一项测试中得分 90 或更高的求职者。这里我们使用 ANY 和 >= 运算符。
SELECT name, scoresFROM candidatesWHERE 90 <= ANY(scores);此查询返回至少有一个分数达到或超过 90 分的求职者。
| 姓名 | 分数 |
|---|---|
| Alice | {85,90,75} |
| Bob | {70,80,95} |
| Diana | {80,85,90} |
将 ANY 与子查询结合使用
Section titled “将 ANY 与子查询结合使用”ANY 运算符也常与子查询一起使用。例如,让我们找出所有分数高于 Charlie 任何一个分数的求职者。
SELECT name, scoresFROM candidatesWHERE id <> 3 AND scores > ANY ( SELECT scores FROM candidates WHERE name = 'Charlie');此查询找到所有(不包括 Charlie)至少有一个分数高于 65、75 或 85 的求职者。本质上,就是任何分数高于 65 的人。