MySQL之使用UNION和UNION ALL合并两个或多个SELECT语句的结果集
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
使用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
保留了所有行,包括重复的行。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。
相关文章
利用Prometheus与Grafana对Mysql服务器的性能监控详解
Prometheus是源于 Google Borgmon的一个开源监控系统,用 Golang开发。被很多人称为下一代监控系统。Grafana是一个开源的图表可视化系统,简单说图表配置比较方便、生成的图表比较漂亮。下面就介绍了利用Prometheus与Grafana对Mysql服务器性能监控的方法。2017-03-03
最新评论