在PostgreSQL等支持数组类型的SQL数据库中,数组操作符是处理数组数据的核心工具,其中&&和@>是两个常用的数组匹配操作符,二者的匹配逻辑和适用场景存在明显差异,需要开发者准确区分。

两个操作符的基础定义
&& 操作符
&&被称为数组重叠操作符,用于判断两个数组是否存在至少一个共同的元素,只要两个数组有交集就返回true,否则返回false。
@> 操作符
@>被称为数组包含操作符,用于判断左侧数组是否完全包含右侧数组的所有元素,即右侧数组的所有元素都存在于左侧数组中时返回true,否则返回false。
核心差异对比
二者的核心差异主要体现在匹配逻辑和适用场景上,具体对比如下:
| 对比维度 | && 操作符 | @> 操作符 |
|---|---|---|
| 匹配逻辑 | 判断两个数组是否有交集,存在至少一个共同元素即成立 | 判断左侧数组是否完全包含右侧数组的所有元素 |
| 元素数量要求 | 无要求,只要存在共同元素即可 | 左侧数组元素数量需要大于等于右侧数组 |
| 典型使用场景 | 查询包含任意指定标签的数据 | 查询包含全部指定标签的数据 |
代码示例演示
我们先创建一张测试表并插入测试数据,方便演示两个操作符的使用效果:
-- 创建测试表,包含一个整型数组字段
CREATE TABLE test_array (
id INT PRIMARY KEY,
tags INT[]
);
-- 插入测试数据
INSERT INTO test_array VALUES (1, ARRAY[1,2,3,4]);
INSERT INTO test_array VALUES (2, ARRAY[3,4,5,6]);
INSERT INTO test_array VALUES (3, ARRAY[5,6,7,8]);
INSERT INTO test_array VALUES (4, ARRAY[1,2,3,4,5]);
&& 操作符示例
查询tags数组中包含1或者2的记录,只要满足其中一个元素存在即可:
SELECT * FROM test_array WHERE tags && ARRAY[1,2];
上述查询会返回id为1和4的记录,因为这两个记录的tags数组都包含1或者2元素,符合重叠匹配的规则。
@> 操作符示例
查询tags数组同时包含1和2的记录,需要两个元素都存在:
SELECT * FROM test_array WHERE tags @> ARRAY[1,2];
上述查询只会返回id为1和4的记录,因为这两个记录的tags数组都同时包含1和2两个元素,符合包含匹配的规则。
使用选择建议
在实际开发中选择操作符可以参考以下规则:
- 如果需要查询数组中包含任意一个指定元素的数据,优先选择
&&操作符,比如查询包含任意热门标签的文章。 - 如果需要查询数组中包含全部指定元素的数据,优先选择
@>操作符,比如查询同时具备多个必选权限的用户。 - 需要注意
@>操作符的左侧数组元素顺序不影响匹配结果,只要元素存在即可,不需要顺序一致。
注意:不同SQL数据库的数组操作符可能存在差异,本文示例基于PostgreSQL数据库,其他数据库使用前需要确认对应操作符的支持情况。
SQL数组操作符&&@>PostgreSQL修改时间:2026-07-01 17:06:21