使用 IN 关键字来搜索集合中的元素

可以在 SQL 语句的 WHERE 子句中使用 IN 关键字来确定集合是否包含某元素。例如:下列查询显示如何构造返回 mgr_namedepartment 的值的查询,其中 Adamsdirect_reports 列中集合的一个元素。

图: 查询

SELECT mgr_name, department 
          FROM manager
          WHERE 'Adams' IN direct_reports

图: 查询结果

mgr_name     Sayles
            department   marketing
尽管可以使用带有 IN 关键字的 WHERE 子句来搜索简单集合中的特定集合。但是查询总是返回整个集合。例如:下列查询返回集合的所有元素,其中 Adamsdirect_reports 列中集合的一个元素。

图: 查询

SELECT mgr_name, direct_reports
          FROM manager
          WHERE 'Adams' IN direct_reports

图: 查询结果

mgr_name         Sayles
              direct_reports  SET {Smith, Waters, Adams, Davis, Kurasawa}

如上所示,对集合列的查询返回整个集合,不是集合中的特定元素。

可以在 WHERE 子句中使用 IN 关键字来只引用简单集合。不能使用 IN 关键字来引用包含本身就是集合的字段的集合。例如:不能使用 IN 关键字来引用 manager 表中的 projects 列,原因是 projects 是嵌套集合。

可以在 SELECT 语句的 WHERE 子句中组合 NOT 和 IN 关键字来搜索不包含某元素的集合。例如:下列查询显示返回 mgr_namedepartment 的值的查询,其中 Adams 不是 direct_reports 列中集合的元素。

图: 查询

SELECT mgr_name, department 
          FROM manager
          WHERE 'Adams' NOT IN direct_reports

图: 查询结果

mgr_name     Williams
            department   engineering
            
            mgr_name     Lyman
            department   publications
            
            mgr_name     Cole
            department   accounting

有关如何对集合列中的元素进行技术的信息,请参阅基数函数