PostgreSQL IN
和 ANY
运算符:详细比较
PostgreSQL 提供 IN
和 ANY
运算符来将列值与一组值进行比较。虽然功能相似,但存在影响查询性能和灵活性的关键差异。
功能等价
从根本上来说,IN
等同于 = ANY
。 两者都检查列值是否与定义集中的任何值匹配。 例如:
<code class="language-sql">SELECT * FROM my_table WHERE id IN (1, 2, 3); SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
这些查询产生相同的结果。
语法变化
两个运算符都有不同的语法:
IN (set)
: 使用括号括起以逗号分隔的值列表。
<code class="language-sql"> SELECT * FROM my_table WHERE id IN (1, 2, 3);</code>
ANY (set)
: 使用大括号封装一组值(通常是数组)。
<code class="language-sql"> SELECT * FROM my_table WHERE id = ANY ('{1, 2, 3}');</code>
数据类型处理:数组与列表
一个关键的区别在于它们处理输入的方式:
IN
接受逗号分隔的列表,可能混合数据类型。ANY
需要一个数组,需要预定义的数据类型。这种差异会影响性能和数据类型限制。
ANY
增强的多功能性
ANY
在多功能性方面超越了 IN
。它与=
之外的各种运算符配对,例如:
<code class="language-sql">SELECT * FROM my_table WHERE name LIKE ANY ('{John, Mary, Joe}');</code>
性能方面
对于广泛的值集,与带有逗号分隔列表的 ANY
相比,带有数组的 IN
通常表现出更好的可扩展性。
否定与排除
要排除列值在集合内的行:
IN
:使用NOT IN (1, 2, 3)
ANY
:雇用id <> ALL ('{1, 2, 3}')
处理排除中的 NULL
值需要仔细考虑,通常需要显式 IS NOT TRUE
检查:
<code class="language-sql">SELECT * FROM my_table WHERE (id = ANY ('{1, 2, 3}')) IS NOT TRUE;</code>
以上是PostgreSQL 中的 IN 与 ANY:何时应该使用每个运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!