查询集的集合操作

按:目前的 Oracle 支持集合运算,但 mysql 还不支持。

集合论中,两个集合可以做如下运算:并(union), 交(intersect), 差(minus)。关系型数据库中的二维表作为记录的集合,也实现了这几个操作。但有一个重要的限制:参与运算的两个集合的记录的结构必须相同。这个限制换成更具体的表达是:参与运算的两个表,必须要有相同的表结构,即:

  1. 有相同数量的列
  2. 列名和类型也一致

并(union)

这个运算在具体的 RDBMS 的实现中,分成了 union / union all 两种,前者严格遵循集合的数学上的集合定义:无重复元素,后者允许重复元素。对这部分的并运算的描述,可以参本站的《查询中 OR, UNION 和 UNION ALL 的区别》一文。

交(intersect)

求两个集合的公共部分。也就是求两个表公用的部分。

差(minus)

求一个集合排除掉和另外一个集合共有的元素后,还剩下的元素的结果集。