UNION

语法说明

UNION 运算符允许您将两个或多个查询结果集合并到一个结果集中。

语法结构

  1. SELECT column_list
  2. UNION [DISTINCT | ALL]
  3. SELECT column_list
  4. UNION [DISTINCT | ALL]
  5. SELECT column_list ...

语法说明

UNIONUNION ALL

使用 UNION 运算符组合两个或多个查询的结果集,需要满足以下条件:

  • 所有 SELECT 语句中出现的列的数量和顺序必须相同。
  • 列的数据类型必须相同或可转换。

使用 UNION ALL,则重复行(如果可用)将保留在结果中。因为 UNION ALL 不需要处理重复项。

UNIONORDER BYLIMIT

使用 ORDER BYLIMIT 子句来对全部 UNION 结果进行分类或限制,则应对单个地 SELECT 语句加圆括号,并把 ORDER BYLIMIT 放到最后一个的后面。

例如:

  1. (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
  2. UNION
  3. (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

或:

  1. (SELECT a FROM t1 WHERE a=10 AND B=1)
  2. UNION
  3. (SELECT a FROM t2 WHERE a=11 AND B=2)
  4. ORDER BY a LIMIT 10;

示例

  1. CREATE TABLE t1 (id INT PRIMARY KEY);
  2. CREATE TABLE t2 (id INT PRIMARY KEY);
  3. INSERT INTO t1 VALUES (1),(2),(3);
  4. INSERT INTO t2 VALUES (2),(3),(4);
  5. mysql> SELECT id FROM t1 UNION SELECT id FROM t2;
  6. +------+
  7. | id |
  8. +------+
  9. | 4 |
  10. | 1 |
  11. | 2 |
  12. | 3 |
  13. +------+
  14. mysql> SELECT id FROM t1 UNION ALL SELECT id FROM t2;
  15. +------+
  16. | id |
  17. +------+
  18. | 1 |
  19. | 2 |
  20. | 3 |
  21. | 2 |
  22. | 3 |
  23. | 4 |
  24. +------+
  1. drop table t1;
  2. CREATE TABLE t1 (a INT, b INT);
  3. INSERT INTO t1 VALUES ROW(4,-2),ROW(5,9),ROW(10,1),ROW(11,2),ROW(13,5);
  4. drop table t2;
  5. CREATE TABLE t2 (a INT, b INT);
  6. INSERT INTO t2 VALUES ROW(1,2),ROW(3,4),ROW(11,2),ROW(10,3),ROW(15,8);
  7. mysql> (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
  8. +------+
  9. | a |
  10. +------+
  11. | 10 |
  12. | 11 |
  13. +------+