SQL UNION和UNION ALL的区别
在SQL语言中,UNION和UNION ALL是两个常见的用于合并查询结果集的操作符。虽然它们的目的都是将多个查询结果集合并为一个结果集,但是在具体的实现方式和输出结果上存在一些差异。
1. UNION操作符
UNION操作符用于合并两个或多个查询的结果集,并去除其中的重复行。合并的结果集将包含来自原始查询结果的独特行,即不会出现重复的行。
语法示例:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
示例代码:
假设我们有两个表Students
和Teachers
,分别记录了学生和教师的信息。我们想要将这两个表的结果合并并且去除重复的行,可以使用UNION操作符。
-- 创建示例表
CREATE TABLE Students (
id INT,
name VARCHAR(50),
age INT
);
CREATE TABLE Teachers (
id INT,
name VARCHAR(50),
subject VARCHAR(50)
);
-- 插入示例数据
INSERT INTO Students (id, name, age) VALUES (1, 'Alice', 20);
INSERT INTO Students (id, name, age) VALUES (2, 'Bob', 22);
INSERT INTO Students (id, name, age) VALUES (3, 'Charlie', 21);
INSERT INTO Teachers (id, name, subject) VALUES (1, 'John', 'Math');
INSERT INTO Teachers (id, name, subject) VALUES (2, 'Alice', 'English');
INSERT INTO Teachers (id, name, subject) VALUES (3, 'Bob', 'Science');
-- 使用UNION合并并去除重复行
SELECT name, age FROM Students
UNION
SELECT name, NULL AS age FROM Teachers;
以上代码执行后,将得到如下结果:
+---------+------+
| name | age |
+---------+------+
| Alice | 20 |
| Alice | NULL |
| Bob | 22 |
| Charlie | 21 |
| John | NULL |
+---------+------+
从结果可以看出,通过UNION操作符合并了Students
和Teachers
表,并去除了重复的行。
2. UNION ALL操作符
UNION ALL操作符也用于合并两个或多个查询的结果集,但不去除重复行。合并的结果集将包含原始查询结果中的所有行,包括重复的行。
语法示例:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
示例代码:
继续使用上述示例表Students
和Teachers
,我们将使用UNION ALL操作符合并这两个表并保留所有行。
-- 使用UNION ALL合并不去除重复行
SELECT name, age FROM Students
UNION ALL
SELECT name, NULL AS age FROM Teachers;
执行以上代码后,将得到如下结果:
+---------+------+
| name | age |
+---------+------+
| Alice | 20 |
| Bob | 22 |
| Charlie | 21 |
| John | NULL |
| Alice | NULL |
| Bob | NULL |
+---------+------+
可以看到,通过UNION ALL操作符合并了Students
和Teachers
表,并且保留了原始查询结果中的重复行。
3. UNION和UNION ALL的区别
- UNION操作符会合并查询结果并去除重复行,而UNION ALL操作符不会去除重复行,保留所有行。
- UNION操作符的执行效率相对较低,因为它需要进行去重操作,而UNION ALL操作符没有此操作,所以通常会比UNION操作符更快。
- UNION操作符的结果集是独一无二的行,而UNION ALL操作符的结果集包含所有行,包括重复的行。
根据具体的需求,我们可以根据是否需要去除重复行来选择使用UNION或UNION ALL操作符。如果需要合并查询结果并去除重复行,则使用UNION操作符;若要保留所有行,包括重复行,则使用UNION ALL操作符。
结论
在SQL语言中,UNION和UNION ALL是两个常用的合并查询结果集的操作符。它们的区别在于UNION操作符去除重复行,而UNION ALL操作符保留所有行。根据具体需求,我们可以选择合适的操作符来达到所需的查询结果。