Mysql 简明教程
MySQL - UNION Operator
MySQL UNION Operator
MySQL 中的 UNION 运算符组合来自多个表的数据(无重复记录)。
如果我们想按顺序从多个表或来自单个表的多组行中选择行,则可以使用 UNION 将它们全部作为一个单一的结果集。
要在多张表上使用 UNION 运算符,所有这些表必须具有并集兼容性。并且仅当它们符合以下条件时,才认为它们具有并集兼容性 −
-
选择相同数量的具有相同数据类型的列。
-
这些列还必需按相同顺序排列。
-
它们不需要有相同数目的行。
满足这些条件后,UNION 运算符会将来自多个表的行作为结果表返回,该表不包含任何这些表中的重复值。
UNION 可用于 MySQL 4.0。本部分说明如何使用它。
Syntax
MySQL 中 UNION 运算符的基本语法如下 −
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Example
让我们首先使用以下 CREATE TABLE 查询创建名为 PROSPECT 的潜在客户表 −
CREATE TABLE PROSPECT (
FNAME CHAR(20) NOT NULL,
LNAME CHAR(20),
ADDRESS VARCHAR(100) NOT NULL
);
现在,我们使用以下 INSERT 语句向此表中插入记录 −
INSERT INTO PROSPECT VALUES
('Peter', 'Jones', '482 Rush St., Apt. 402'),
('Bernice', 'Smith', '916 Maple Dr.');
PROSPECT 表创建为 −
ACTIVE Table −
然后,我们使用以下 CREATE TABLE 查询创建名为 ACTIVE 的活跃客户表 −
CREATE TABLE ACTIVE (
FNAME CHAR(20) NOT NULL,
LNAME CHAR(20),
ADDRESS VARCHAR(100) NOT NULL
);
使用以下 INSERT 语句向 ACTIVE 表中插入记录 −
INSERT INTO ACTIVE VALUES
('Grace', 'Peterson', '16055 Seminole Ave.'),
('Bernice', 'Smith', '916 Maple Dr.'),
('Walter', 'Brown', '8602 1st St.');
ACTIVE 表的创建如下所示:
现在,您想通过合并所有表中的名称和地址来创建一个单独的邮件列表。UNION 提供了一种实现此操作的方法。
以下查询说明了如何同时从所有表中选择名称和地址:
SELECT FNAME, LNAME, ADDRESS FROM PROSPECT
UNION
SELECT FNAME, LNAME, ADDRESS FROM ACTIVE;
UNION with WHERE clause
我们可以在 UNION 运算符中使用 WHERE 子句来在组合之前过滤每个 SELECT 语句的结果。
Syntax
下面是使用 UNION 运算符与 WHERE 子句一起的语法 -
SELECT column1, column2, column3
FROM table1
WHERE column1 = 'value1'
UNION
SELECT column1, column2, column3
FROM table2
WHERE column1 = 'value2';
UNION with ORDER BY clause
当我们在 ORDER BY 子句中使用 UNION 时,它会组合所有 SELECT 语句的有序结果集并生成单个的有序结果集。
Syntax
以下是使用 UNION 运算符和 ORDER BY 子句的基本语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2
ORDER BY column_name;
UNION with Aliases
我们可以在 UNION 运算符的 MySQL 语句中使用别名,给表或列一个临时名称,这在使用具有相似的名称的多个表或列时非常有用。
与别名一起使用 UNION 时,需要注意的是列别名是由第一个 SELECT 语句决定的。因此,如果您想为不同 SELECT 语句中的同一列使用不同的别名,则需要在所有 SELECT 语句中使用列别名,以确保最终结果集中列名称的一致性。
Syntax
下面是用别名使用 Union 的语法 -
SELECT column1 AS alias1, column2 AS alias2
FROM table1
UNION
SELECT column3 AS alias1, column4 AS alias2
FROM table2;