集合运算

    TiDB 支持三种集合运算:并集 (UNION),差集 (EXCEPT) 和交集 (INTERSECT)。最小的集合单位是一个 。

    数学上,两个集合 A 和 B 的并集是含有所有属于 A 或属于 B 的元素。下面是一个 UNION 的例子:

    1. create table t1 (a int);
    2. create table t2 (a int);
    3. insert into t1 values (1),(2);
    4. insert into t2 values (1),(3);

    UNION DISTINCTUNION ALL 的结果分别如下:

    若 A 和 B 是集合,则 A 与 B 的差集是由所有属于 A 但不属于 B 的元素组成的集合。

    1. | a |
    2. +---+
    3. | 2 |
    4. +---+
    5. 1 rows in set (0.00 sec)

    数学上,两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而且没有其他元素的集合。

    交集 (INTERSECT) 暂时不支持 INTERSECT ALL。交集 (INTERSECT) 的计算优先级大于差集 (EXCEPT) 和并集 (UNION)。

    1. select * from t1 union all select * from t1 intersect select * from t2;
    2. +---+
    3. | a |
    4. +---+
    5. | 1 |
    6. | 2 |
    7. +---+
    8. 3 rows in set (0.00 sec)

    TiDB 支持单独为整个集合运算进行 ORDER BY 或者 。

    1. (select * from t1 union all select * from t1 intersect select * from t2) order by a limit 2;
    2. +---+
    3. | a |
    4. +---+
    5. | 1 |
    6. | 1 |