SQL中UNION的用法
1. 介绍
在SQL中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。它可以将两个或多个查询的结果合并为一个结果集,并且自动去重。UNION操作要求参与合并的查询具有相同的列数和列类型,但是它们不必按照相同的顺序列出。
2. UNION的语法
UNION操作符的基本语法如下:
SELECT column1, column2, ...
FROM table_name1
UNION
SELECT column1, column2, ...
FROM table_name2;
首先,我们使用SELECT语句从两个表(table_name1
和table_name2
)中选择要查询的列(column1
,column2
等)。然后,我们使用UNION操作符来合并两个查询的结果。
值得注意的是,SELECT语句中的列数必须相同,而且相应的列的数据类型也必须兼容。
3. UNION的示例
为了更好地理解UNION的用法,让我们通过一些示例来演示它的工作原理。
假设我们有两个表格employees
和customers
,它们具有相同的列名,但是存储了不同类型的数据。
创建示例表格
我们首先创建一个名为employees
的表格,并向其添加一些数据:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100)
);
INSERT INTO employees (id, name, department)
VALUES (1, 'John Doe', 'Sales');
INSERT INTO employees (id, name, department)
VALUES (2, 'Jane Smith', 'Finance');
然后,我们创建一个名为customers
的表格,并向其添加一些数据:
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
city VARCHAR(100)
);
INSERT INTO customers (id, name, city)
VALUES (1, 'Alice Johnson', 'New York');
INSERT INTO customers (id, name, city)
VALUES (2, 'Bob Davis', 'Los Angeles');
使用UNION合并两个表格的结果
现在,我们可以使用UNION操作符来合并employees
和customers
表格的结果:
SELECT id, name, department
FROM employees
UNION
SELECT id, name, city
FROM customers;
运行以上查询,我们将得到以下结果:
id | name | department
---+---------------+------------
1 | John Doe | Sales
2 | Jane Smith | Finance
1 | Alice Johnson | NULL
2 | Bob Davis | NULL
结果中的前两行来自employees
表格,后两行来自customers
表格。由于我们使用了UNION操作符,结果中的重复行已经被自动去重。
需要注意的是,由于department
列和city
列的数据类型不同,因此在合并结果中,city
列的数据类型被转换为VARCHAR(100)
的类型,在NULL值的位置上。
使用UNION ALL合并两个表格的结果
与UNION不同,UNION ALL不会自动去重结果集中的重复行。下面是使用UNION ALL操作符合并两个表格的结果的示例:
SELECT id, name, department
FROM employees
UNION ALL
SELECT id, name, city
FROM customers;
运行以上查询,我们将得到以下结果:
id | name | department
---+---------------+------------
1 | John Doe | Sales
2 | Jane Smith | Finance
1 | Alice Johnson | NULL
2 | Bob Davis | NULL
结果与使用UNION操作符相同,但是它保留了结果集中的重复行。
4. 总结
通过使用UNION操作符,我们可以将多个查询的结果合并为一个结果集,并且自动去重。UNION操作要求合并的查询具有相同的列数和列类型,但是它们不必按照相同的顺序列出。
值得注意的是,UNION操作是一种相对较慢的操作,因为它涉及内部排序和去重的操作。因此,在使用UNION操作时,我们应该谨慎考虑性能问题。