当通过此集合运算符组合两个查询时,INTERSECT 计算通过为其运算对象的两个查询返回的行的交集。
INTERSECT 返回的行展现在左边和右边的 SELECT 语句的结果集中。INTERSECT 结果通常是不同的或唯一的行,因为 INTERSECT 消除任何重复的行。
请考虑下列示例,其中表 t1 有下列行:
create table t1 (col1 int); insert into t1 values (1); insert into t1 values (2); insert into t1 values (2); insert into t1 values (2); insert into t1 values (3); insert into t1 values (4); insert into t1 values (4); insert into t1 values (NULL); insert into t1 values (NULL); insert into t1 values (NULL);
在同一示例中,表 t2 有这些行:
create table t2 (col1 int); insert into t2 values (1); insert into t2 values (3); insert into t2 values (4); insert into t2 values (4); insert into t2 values (NULL);
下列查询从 INTERSECT 操作对象的左边与右边的两个查询返回不同的行。在此要注意的重要问题是该结果有 NULL 值。因为当将表 t2 与表 t1 进行比较时,考虑到表 t2 中的 NULL 值是相等的,因此来自该交集的 NULL 值返回在组合的结果集中:
SELECT col1 FROM t1 INTERSECT SELECT col1 FROM t2; col1 1 3 4 4 row(s) retrieved.
INTERSECT 运算符有一些(但不是所有)与 UNION 运算符相同的限制,但 INTERSECT 不支持使得 UNION 能够返回重复的值的 ALL 关键字。另请参阅主题 对组合的 SELECT 的限制。