- 类别:
[ NOT ] IN¶
测试其实参是否是显式列表的成员之一或子查询的结果。
备注
在子查询形式中,IN 等效于 = ANY,而 NOT IN 等效于 <> ALL。
小技巧
您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务。
语法¶
要比较各个值,请运行以下语句:
要比较 *行构造函数*(带括号的值列表),请运行以下语句:
要将值与子查询返回的值进行比较,请运行以下语句:
参数¶
value要搜索的值。
value_A、value_B要搜索的行构造函数的元素。
确保 IN 右侧的每个值(例如
(value3, value4))与 IN 左侧的值(例如(value_A, value_B))具有相同的元素个数。value_#value应与之比较的值。如果要比较的值是行构造函数,则每个
value_#都是行构造函数的单个元素。subquery一个子查询,返回
value可与之比较的值的列表。
使用说明¶
排序规则详细信息¶
Arguments with collation specifications currently aren't supported.
示例¶
以下示例使用 IN 函数。
将 IN 与简单字面量一起使用¶
以下示例演示如何将 IN 和 NOT IN 与简单字面量一起使用:
将 IN 与子查询一起使用¶
这些示例展示了如何在子查询中使用 IN。
将 IN 与表一起使用¶
以下示例演示如何将 IN 与表一起使用。下面的语句创建示例中使用的表。
此示例演示如何将 IN 与表的单个列一起使用:
此示例演示如何将 IN 与表的多个列一起使用:
此示例演示如何将 IN 与读取表的多个列的子查询一起使用:
使用 NULL¶
请记住,NULL != NULL。包含与 NULL 比较(包括相等条件)的列表的 IN 和 NOT IN 可能会产生意外结果,因为 NULL 表示一个未知值。与 NULL 的比较不会返回 TRUE 或 FALSE,它们会返回 NULL。另请参阅 三元逻辑。
例如,下面的查询返回 NULL,而不是 TRUE,因为 SQL 无法确定 NULL 是否等于任何值,包括另一个 NULL。
注意,如果将查询改为选择 1 而不是 NULL,它将返回 TRUE:
在这种情况下,结果是 TRUE,因为 1 确实在 IN 列表中有匹配项。NULL 也存在于 IN 列表中,但这不会影响结果。
类似地,如果列表中有任何值为 NULL,NOT IN 与 NULL 的比较也会返回 NULL。
同样的行为也适用于下面的查询,其中 4, 5, NULL 的值集合 不匹配 4, 5, NULL 或 7, 8, 9:
下面的示例展示了使用子查询定义 IN 列表值进行比较时,NULL 比较的相同行为: