MariaDB UNION 子句用于组合两个或多个 SELECT 语句的结果集。使用 UNION 子句时,必须满足以下条件:

  • 每个 SELECT 语句中的列数应该相等。
  • 每个 SELECT 语句中的列的数据类型应该匹配。
  • 每个 SELECT 语句中的列顺序应该匹配。

语法

在 MariaDB 中使用 UNION 子句的语法如下:

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2 
注意: UNION 子句仅采用不同的值。要合并重复值,可以使用 UNION ALL 子句。

在 MariaDB 中使用 UNION ALL 子句的语法如下:

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2 

示例:

考虑名为 Employee员工表和Vendor的供应商表具有以下记录:

表 1:员工表

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryLondon242750
3JoParis272800

表 2:供应商表

VendorIDNameCityAge
1JohnLondon29
2RameshNew Delhi28
3SureshNew Delhi31

使用 UNION 子句:要从表 Employee 和 Vendor 中获取不同的城市,查询如下:

SELECT City FROM Employee
UNION
SELECT City FROM Vendor
ORDER BY City; 

这将产生如下所示的结果:

City
London
New Delhi
Paris

使用 UNION ALL 子句: 从表 Employee 中获取所有城市 和 Vendor,查询如下:

SELECT City FROM Employee
UNION ALL
SELECT City FROM Vendor
ORDER BY City; 

上述代码的结果将是:

City
London
London
London
New Delhi
New Delhi
Paris

将 UNION 子句与 WHERE 子句结合使用: 从表 Employee 和 Vendor 中获取不同的姓名和城市,其中人员年龄小于 30,可以使用以下查询:

SELECT Name, City FROM Employee
WHERE Age < 30
UNION
SELECT Name, City FROM Vendor
WHERE Age < 30
ORDER BY City; 

这将产生以下结果:

NameCity
JohnLondon
MarryLondon
RameshNew Delhi
JoParis

使用UNION ALL 子句与 WHERE 子句: 要从表 Employee 和 Vendor 中获取年龄小于 30 岁的所有姓名和城市,以下查询可以使用:

SELECT Name, City FROM Employee
WHERE Age < 30
UNION ALL
SELECT Name, City FROM Vendor
WHERE Age < 30
ORDER BY City; 

这将产生如下所示的结果:

NameCity
JohnLondon
MarryLondon
JohnLondon
RameshNew Delhi
JoParis

使用别名:使用别名是识别不同表记录的好方法。请参阅下面的示例:

SELECT 'Employee' AS Type, Name, City FROM Employee
WHERE Age < 30
UNION ALL
SELECT 'Vendor', Name, City FROM Vendor
WHERE Age < 30
ORDER BY City; 

这将产生如下所示的结果:

TypeNameCity
EmployeeJohnLondon
EmployeeMarryLondon
VendorJohnLondon
VendorRameshNew Delhi
EmployeeJoParis