常应常静 发表于 2024-4-13 17:38:27

MySQL之使用UNION和UNION ALL合并两个或多个SELECT语句的结果集

使用UNION和UNION ALL合并两个或多个SELECT语句的结果集

在MySQL中, UNION 和 UNION ALL 是用于合并两个或多个 SELECT 语句的结果集的操作符。
UNION 会去除结果集中的重复行,返回唯一的行,而 UNION ALL 会返回所有的行,包括重复行。

举个通用的例子

SELECT column1, column2, ...
FROM table1
WHERE condition
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition;

[*]SELECT column1, column2, ...: 指定要查询的列。
[*]FROM table: 指定要查询的表。
[*]WHERE condition: 指定筛选条件(可选)。
注意事项:
UNION 连接的两个 SELECT 语句必须包含相同数量和类型的列,列的顺序也必须相同。
默认情况下,UNION 会去除重复的行。如果要包含重复的行,可以使用 UNION ALL。
使用 UNION 或 UNION ALL 时,结果集的列名是由第一个 SELECT 语句中的列名决定的,因此要确保两个 SELECT 语句中的列名和类型相匹配。

举个实际的例子

假设有两个表 employees1 和 employees2
包含相同的列结构和部分重复数据,然后使用 UNION 和 UNION ALL 进行查询和合并。
创建两个表并插入一些数据
-- 创建 employees1 表
CREATE TABLE employees1 (
    employee_id INT,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

-- 插入数据到 employees1 表
INSERT INTO employees1 VALUES
(1, 'John', 'Doe'),
(2, 'Jane', 'Smith'),
(3, 'Bob', 'Johnson'),
(4, 'Alice', 'Doe');

-- 创建 employees2 表
CREATE TABLE employees2 (
    employee_id INT,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

-- 插入数据到 employees2 表,包含一些与 employees1 表重复的数据
INSERT INTO employees2 VALUES
(3, 'Bob', 'Johnson'),
(4, 'Alice', 'Doe'),
(5, 'Eva', 'Williams');使用 UNION 合并这两个表的数据:
-- 使用 UNION 合并,去除重复行
SELECT employee_id, first_name, last_name
FROM employees1
UNION
SELECT employee_id, first_name, last_name
FROM employees2;结果如下:
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 1         | John       | Doe       |
| 2         | Jane       | Smith   |
| 3         | Bob      | Johnson   |
| 4         | Alice      | Doe       |
| 5         | Eva      | Williams|
+-------------+------------+-----------+可以看到,UNION 自动去除了重复的行。
使用 UNION ALL 合并这两个表的数据:
-- 使用 UNION ALL 合并,包含重复行
SELECT employee_id, first_name, last_name
FROM employees1
UNION ALL
SELECT employee_id, first_name, last_name
FROM employees2;结果如下:
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 1         | John       | Doe       |
| 2         | Jane       | Smith   |
| 3         | Bob      | Johnson   |
| 4         | Alice      | Doe       |
| 3         | Bob      | Johnson   |
| 4         | Alice      | Doe       |
| 5         | Eva      | Williams|
+-------------+------------+-----------+可以看到

[*]UNION ALL 保留了所有行,包括重复的行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/319144u9u.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MySQL之使用UNION和UNION ALL合并两个或多个SELECT语句的结果集