MySQL UNION 操作符


MySQL UNION 操作符

在 MySQL 中,UNION 操作符用于将两个或多个 SELECT 语句的结果集合并为一个结果集并去除重复数据。

语法

以下是 UNION 操作符的语法:

SELECT column1, column2, ... FROM table1 
UNION [ALL]
SELECT column1, column2, ... FROM table2 
[UNION [ALL] 
SELECT column1, column2, ... FROM table3 ...];

其中:

  • column1, column2, …:指定要查询的列。
  • table1, table2, …:指定要查询的表。
  • ALL:可选,表示返回所有结果集,包括重复的行。默认情况下去除重复的行。
  • SELECT 语句的数目没有限制,每个 SELECT 后面可以跟随一个 UNIONUNION ALL 操作符。

工作原理

当使用 UNION 操作符时,MySQL 将两个或多个 SELECT 语句的结果合并为一个结果集。如果没有指定 ALL 选项,则 MySQL 会去除结果集中的重复行。如果指定了 ALL 选项,则返回所有行,包括重复的行。

在合并结果集时,MySQL 会根据 SELECT 语句的列数和顺序将结果逐行合并。如果两个 SELECT 语句的列数或列的数据类型不同,则会引发错误。

示例

假设有两个表 orders1orders2,它们的结构和数据如下:

-- Table orders1
CREATE TABLE orders1 (
  id INT,
  product_name VARCHAR(50),
  price DECIMAL
);

-- Insert data
INSERT INTO orders1 (id, product_name, price)
VALUES (1, 'Apples', 2.50),
       (2, 'Bananas', 1.50),
       (3, 'Oranges', 3.00);

-- Table orders2
CREATE TABLE orders2 (
  id INT,
  product_name VARCHAR(50),
  price DECIMAL
);

-- Insert data
INSERT INTO orders2 (id, product_name, price)
VALUES (1, 'Apples', 2.50),
       (2, 'Bananas', 1.50),
       (3, 'Oranges', 3.00),
       (4, 'Pears', 2.00);

现在,我们可以使用 UNION 操作符将这两个表的结果组合为一个结果集,如下所示:

SELECT product_name, price FROM orders1
UNION 
SELECT product_name, price FROM orders2;

执行以上查询语句后,将返回以下结果:

+-------------+-------+
| product_name| price |
+-------------+-------+
| Apples      |  2.50 |
| Bananas     |  1.50 |
| Oranges     |  3.00 |
| Pears       |  2.00 |
+-------------+-------+

在此示例中,我们从 orders1orders2 表中查询了产品名称和价格,并使用 UNION 操作符将结果合并为一个结果集。由于 orders1orders2 表都包含重复的数据,因此我们只得到了四个结果行。

总结

UNION 操作符用于将两个或多个 SELECT 语句的结果集合并为一个结果集,并去除重复数据。它是一个强大而灵活的工具,可以使查询结果更加丰富和有用。使用 UNION 操作符时需要注意一些限制和注意事项,例如,两个 SELECT 语句必须具有相同的列数和数据类型,否则会导致错误。