Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
计算两个或多个查询的结果集的交集。
[ WITH temporary-views ] query-block INTERSECT [ ALL | DISTINCT ] query-block [ ORDER BY [ integer | select-list-expression-name ] [ ASC | DESC ], ... ] [ FOR XML xml-mode ] [ OPTION( query-hint, ... ) ]
query-block : 请参见SQL 语法中的常见元素。
query-hint : MATERIALIZED VIEW OPTIMIZATION option-value | FORCE OPTIMIZATION | option-name = option-value
option-name : identifier
option-value:hostvar(允许指示符)| string | identifier | number
FOR XML 子句 有关 FOR XML 子句的信息,请参见SELECT 语句。
OPTION 子句 此子句用于指定执行语句时的提示。支持以下提示:
OPTION( isolation_level = ... )
INTERSECT 用于计算两个查询块的结果集之间的集合交叉。需注意的是,查询块是可以嵌套的,并且可以依次构成嵌套的 SELECT 语句或集合运算符 UNION、EXCEPT 或 INTERSECT。单独指定 INTERSECT 等同于指定 INTERSECT DISTINCT。
INTERSECT ALL 实现包交集而不是集合交叉。例如,如果第一个 query-block 包含具有特定值的 5 个(重复)行,而第二个 query-block 包含与第一个中的行具有相同值的 3 个重复行,则 INTERSECT ALL 将返回 3 行。
如果任一个 query-block 不包含重复行,则 INTERSECT 的结果与 INTERSECT ALL 的结果相同。
两个 query-block 的结果集必须兼容 UNION;它们在各自的 SELECT 列表中必须具有相同数量的项目,并且各表达式的类型可以进行比较。如果两个 SELECT 列表中的相应项具有不同的数据类型,则 SQL Anywhere 为结果中的相应列选择数据类型,并自动相应地转换各 query-block 中的列。
显示的列名与为第一个 query-block 显示的列名相同,这些名称用于确定与 ORDER BY 子句匹配的表达式名称。另一种自定义结果集列名的方法是使用公用表表达式(WITH 子句)。
必须具有对各 query-block 的 SELECT 权限。
无。
SQL/2008 INTERSECT 是 SQL/2008 标准的可选 SQL 语言功能 F302。用 INTERSECT 显式指定 DISTINCT 关键字是可选 SQL 语言功能 T551。用 INTERSECT 指定 ORDER BY 子句是 SQL 语言功能 F850。包含 ORDER BY 子句的 query-block 构成 SQL/2008 语言功能 F851。包含行限制子句(SELECT TOP 或 LIMIT)的查询块构成可选 SQL 语言功能 F857 或 F858(具体取决于上下文)。FOR XML 子句和 OPTION 子句是服务商扩充。
Transact-SQL Adaptive Server Enterprise 不支持 INTERSECT。但是,INTERSECT ALL 和 INTERSECT DISTINCT 都可用在受 SQL Anywhere 支持的 Transact-SQL 方言中。
有关 INTERSECT 用法的示例,请参见集合运算符和 NULL。