SQL中UNION
1. 介绍
在SQL语言中,UNION是一种用于组合多个SELECT语句结果集的操作符。它可以将两个或多个SELECT语句的结果合并成一个结果集,且不包含重复的行。UNION操作符可以用于联结多个表、合并查询结果、进行数据整合等多种应用场景。
本文将详细介绍UNION操作符的使用方法、语法规则、注意事项以及一些实际应用示例。
2. UNION操作符的语法
UNION操作符的语法如下所示:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
其中,SELECT column_name(s) FROM table1
和 SELECT column_name(s) FROM table2
是两个不同的SELECT语句,它们的列数和类型必须一致。通过使用UNION操作符,两个SELECT语句的结果将被合并为一个结果集输出。
3. UNION操作符的特性
- UNION操作符将两个或多个SELECT语句的结果集合并,生成一个结果集。该结果集包含所有SELECT语句的检索结果,且不包含重复的行。
- UNION操作符要求被合并的每个SELECT语句具有相同的列数和列类型。如果两个SELECT语句的列数或类型不一致,将会产生错误。
- UNION操作符默认以升序对结果进行排序。如果想要改变排序规则,可以使用ORDER BY子句进行排序。注意,ORDER BY子句只能放在最后。
- UNION操作符只返回唯一的行,不会有重复。如果需要返回所有行(包括重复的行),可以使用UNION ALL操作符。
4. UNION ALL和UNION的区别
在使用UNION操作符时,可以选择使用UNION ALL或UNION关键字,它们之间有几点关键的区别:
- UNION会自动去除重复的行,而UNION ALL则返回所有的行,包括重复的行。
- UNION ALL的性能往往优于UNION,因为UNION需要对结果进行排序以去除重复的行,而UNION ALL不需要进行排序。
- 如果不需要去重,只需要简单地将两个结果集合并为一个结果集,推荐使用UNION ALL。
5. 示例代码
5.1 创建测试表
首先,我们需要创建一些用于演示的测试表,假设我们有两个表:employees
和customers
。
-- 创建employees表
CREATE TABLE employees (
id INT,
name VARCHAR(50),
salary INT
);
-- 插入数据
INSERT INTO employees (id, name, salary)
VALUES (1, 'Jack', 5000),
(2, 'Lucy', 6000),
(3, 'Tom', 4000);
-- 创建customers表
CREATE TABLE customers (
id INT,
name VARCHAR(50),
city VARCHAR(50)
);
-- 插入数据
INSERT INTO customers (id, name, city)
VALUES (1, 'Alice', 'New York'),
(2, 'Bob', 'San Francisco'),
(3, 'Cindy', 'Los Angeles');
5.2 使用UNION操作符合并查询结果
假设我们需要将employees
表和customers
表中的姓名合并为一个结果集,并且按照姓名的升序排序。
-- 合并查询结果,并按姓名排序
SELECT name FROM employees
UNION
SELECT name FROM customers
ORDER BY name;
运行结果:
+-------+
| name |
+-------+
| Alice |
| Bob |
| Cindy |
| Jack |
| Lucy |
| Tom |
+-------+
5.3 使用UNION ALL操作符合并查询结果
现在我们使用UNION ALL操作符合并查询结果,将employees
表和customers
表中的姓名合并为一个结果集,包含重复的行。
-- 合并查询结果,包含重复的行
SELECT name FROM employees
UNION ALL
SELECT name FROM customers
ORDER BY name;
运行结果:
+-------+
| name |
+-------+
| Alice |
| Bob |
| Cindy |
| Jack |
| Lucy |
| Tom |
| Alice |
| Bob |
| Cindy |
+-------+
5.4 UNION操作符的注意事项
在使用UNION操作符时,需要注意以下几点:
- 被合并的SELECT语句必须具有相同的列数和列类型。
- UNION操作符默认去除重复的行,如果需要包含重复的行,应该使用UNION ALL操作符。
- UNION操作符会进行默认的升序排序,如果需要进行排序,可以在最后使用ORDER BY子句进行排序。
6. 结论
本文简单介绍了SQL中的UNION操作符,它可以用于合并不同SELECT语句的结果集,实现数据的整合和查询结果的合并。我们学习了UNION操作符的使用方法、语法规则、特性以及与UNION ALL操作符的区别。通过示例代码,我们展示了UNION操作符的具体应用场景和运行结果。