什么是MySQL的UNION函数?
在MySQL中,UNION函数可以将多个查询语句的结果合并为一个结果集。这个函数类似于其他编程语言中的数组合并或集合合并操作。
使用UNION函数需要满足以下两个要求:
所有SELECT语句中的列数必须相同
每个SELECT语句中的列类型必须兼容
了解了UNION函数的基本概念之后,下面开始介绍如何使用这个函数来合并多个查询结果。
使用UNION合并两个结果集
步骤一:创建两个表格
为了方便演示,我们需要在MySQL中创建两个表格,用于存放我们的数据。
CREATE TABLE first_table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT(3) NOT NULL
);
CREATE TABLE second_table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT(3) NOT NULL
);
以上代码创建了两个简单的表格,它们都包含两列:name和age。
步骤二:向表格中插入数据
为了使这两个表格有一些数据可用,我们需要在它们中插入一些行:
INSERT INTO first_table (name, age) VALUES
('John', 24),
('Mary', 33),
('Tom', 50);
INSERT INTO second_table (name, age) VALUES
('Sarah', 27),
('David', 43),
('Janice', 19);
步骤三:使用UNION合并两个表格
现在两个表格都有数据可用了,我们可以使用UNION操作将它们合并为一个结果集:
SELECT name, age FROM first_table
UNION
SELECT name, age FROM second_table;
以上代码将会返回以下结果:
+--------+-----+
| name | age |
+--------+-----+
| John | 24 |
| Sarah | 27 |
| David | 43 |
| Mary | 33 |
| Janice | 19 |
| Tom | 50 |
+--------+-----+
这个结果集包含两个查询的所有行,并且所有行都已按name列进行了排序。
使用UNION合并多个结果集
步骤一:创建新表格
我们需要首先创建一个新表格,用于存储多个结果集:
CREATE TABLE combined_table (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT(3) NOT NULL
);
步骤二:向表格中插入数据
为了演示目的,我们将使用前面的两个表,但是这次我们将插入一些新的行以创建更多的结果集:
INSERT INTO first_table (name, age) VALUES
('Linda', 19),
('Mike', 58),
('Rebecca', 44)
;
INSERT INTO second_table (name, age) VALUES
('Peter', 31),
('Jane', 48),
('Kevin', 23)
;
步骤三:使用UNION ALL合并多个表格
这次,我们将使用UNION ALL操作,以便返回多个结果集。请注意,UNION ALL与UNION操作非常相似,但是它不会删除任何重复的行。因此,如果多个表具有相同的行,则每个行都会在结果集中出现一次。
SELECT name, age FROM first_table
UNION ALL
SELECT name, age FROM second_table
UNION ALL
SELECT name, age FROM first_table
UNION ALL
SELECT name, age FROM second_table;
这个查询将返回以下结果:
+---------+-----+
| name | age |
+---------+-----+
| John | 24 |
| Mary | 33 |
| Tom | 50 |
| Sarah | 27 |
| David | 43 |
| Janice | 19 |
| Linda | 19 |
| Mike | 58 |
| Rebecca | 44 |
| Peter | 31 |
| Jane | 48 |
| Kevin | 23 |
| John | 24 |
| Mary | 33 |
| Tom | 50 |
| Sarah | 27 |
| David | 43 |
| Janice | 19 |
| Linda | 19 |
| Mike | 58 |
| Rebecca | 44 |
| Peter | 31 |
| Jane | 48 |
| Kevin | 23 |
+---------+-----+
这个结果集包含四个查询的所有行,并且以name列进行排序。请注意,有些行出现了两次,这是因为我们使用的是UNION ALL而不是UNION。
总结
使用MySQL的UNION函数可以合并多个查询结果,这对于需要将多个结果集合并到一起并进行排序的情况非常有用。在使用UNION操作时,我们需要确定所有查询语句具有相同的列数和类型。如果存在重复的行,则可以使用UNION ALL而不是UNION。