INTERSECT 运算符

当通过此集合运算符组合两个查询时,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 的限制