MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行

UNION 操作符必须由两个或多个 SELECT 语句组成,每个 SELECT 语句的列数和对应位置的数据类型必须相同

MySQL UNION 操作符语法格式:

SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2
[ORDER BY column1, column2, ...];

参数说明:

  • column1, column2, ... 是你要选择的列的名称,如果使用 * 表示选择所有列
  • table1, table2, ... 是你要从中查询数据的表的名称
  • condition1, condition2, ... 是每个 SELECT 语句的过滤条件,是可选的
  • ORDER BY 子句是一个可选的子句,用于指定合并后的结果集的排序顺序

以下示例在之前创建的RoboMaster数据库下进行操作

当前数据库数据

mysql> SELECT * FROM Username;
+------+------------+-----------+
| id   | Username   | Password  |
+------+------------+-----------+
|    1 | steins_xin | 123456    |
|    2 | xin        | 123456789 |
+------+------------+-----------+
2 rows in set (0.01 sec)

示例:

  1. 基本的 UNION 操作:
SELECT id FROM username 
UNION
SELECT id FROM username 
ORDER BY id;

结果:

mysql> SELECT id FROM username
    -> UNION
    -> SELECT id FROM username
    -> ORDER BY id;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)
  1. 使用过滤条件的 UNION:
SELECT id FROM username WHERE username = 'xin'
UNION
SELECT id FROM username WHERE username = 'steins_xin'
ORDER BY id;

结果:

mysql> SELECT id FROM username WHERE username = 'xin'
    -> UNION
    -> SELECT id FROM username WHERE username = 'steins_xin'
    -> ORDER BY id;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)
  1. 使用 UNION ALL 不去除重复行:
SELECT id FROM username 
UNION ALL
SELECT id FROM username 
ORDER BY id;

结果:

mysql> SELECT id FROM username
    -> UNION ALL
    -> SELECT id FROM username
    -> ORDER BY id;
+------+
| id   |
+------+
|    1 |
|    1 |
|    2 |
|    2 |
+------+
4 rows in set (0.00 sec)

UNION 操作符在合并结果集时会去除重复行,而 UNION ALL 不会去除重复行,因此 UNION ALL 的性能可能更好,但如果你确实希望去除重复行,可以使用 UNION

results matching ""

    No results matching ""