SQL Server (Transact-SQL) UNION 子句用于组合两个或多个 SELECT 语句。使用 UNION 子句时,必须满足以下条件:
- 每个 SELECT 语句中的列数应该相等。
- 每个 SELECT 语句中的列的数据类型应该匹配。
- 每个 SELECT 语句中的列顺序应匹配。
语法
在 SQL Server (Transact-SQL) 中使用 UNION 子句的语法为如下所示:
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2
注意: UNION 子句仅采用不同的值。要合并重复值,可以使用 UNION ALL 子句。
在 SQL Server (Transact-SQL) 中使用 UNION ALL 子句的语法如下:
SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2
示例:
考虑名为 Employee 和 Vendor 的数据库表,其中包含以下记录:
表 1:Employee 表
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | London | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
表 2:Vendor 表
VendorID | Name | City | Age |
---|---|---|---|
1 | John | London | 29 |
2 | Ramesh | New Delhi | 28 |
3 | Suresh | New Delhi | 31 |
使用 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;
这将产生以下结果:
Name | City |
---|---|
John | London |
Marry | London |
Ramesh | New Delhi |
Jo | Paris |
使用 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;
这将产生如下所示的结果:
Name | City |
---|---|
John | London |
Marry | London |
John | London |
Ramesh | New Delhi |
Jo | Paris |
使用别名: 使用别名是识别不同表记录的好方法。请参阅下面的示例:
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;
这将产生如下所示的结果:
Type | Name | City |
---|---|---|
Employee | John | London |
Employee | Marry | London |
Vendor | John | London |
Vendor | Ramesh | New Delhi |
Employee | Jo | Paris |