MySQL UNION 运算符

MySQL UNION 运算符

UNION 运算符用于组合两个或多个 SELECT 语句的结果集。

UNION 运算符会自动从结果集中删除重复的行

UNION 的要求:

  • UNION 中的每个 SELECT 语句必须具有相同数量的列
  • 各列还必须具有相似的数据类型
  • 每个 SELECT 语句中的列顺序也必须相同

UNION 语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注意:结果集中的列名通常等于第一个 SELECT 语句中的列名。

演示数据库

在本教程中,我们将使用著名的 Northwind 演示数据库。

以下是 Customers 表的部分片段:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

以及 Suppliers 表的部分片段:

SupplierID SupplierName ContactName Address City PostalCode Country
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. London EC1 4SD UK
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA
3 Grandma Kelly's Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA

SQL UNION 示例

以下 SQL 语句返回 CustomersSuppliers 表中的城市(仅限不重复的值):

实例

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

亲自试一试

注意:如果某些客户或供应商来自相同的城市,每个城市只会列出一次,因为 UNION 仅选择不重复的值。使用 UNION ALL 也可以选择重复的值!

带 WHERE 的 SQL UNION

以下 SQL 语句返回 CustomersSuppliers 表中的德国城市(仅限不重复的值):

实例

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

亲自试一试

另一个 UNION 示例

以下 SQL 语句列出所有客户和供应商:

实例

SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;

亲自试一试

请注意上面的 AS Type - 这是一个别名。SQL 别名用于为表或列指定临时名称。别名仅在该查询的持续时间内存在。因此,这里我们创建了一个名为 Type 的临时列,用于列出联系人属于 Customer(客户)还是 Supplier(供应商)。