跳转到主内容
极星编程网:以代码为星,赴技术山海!

sql中如何合并结果集 结果集合并的union用法详解

sql中合并结果集主要使用union操作符,分为union和union all两种用法。1. union会去除重复行,性能较慢;2. union all保留所有行,包括重复数据,性能更好。两者均要求合并的列数量和数据类型一致。若列名不一致,结果集列名以第一个select语句为准,可通过别名统一。合并后排序需在最后使用order by子句。union用于合并结构相似的多个结果集为一个,适用于相同实体分布在不同表的情况;join则用于基于关联条件连接不同表的不同实体,是列的合并而非行的堆叠。正确选择union或join取决于数据关系及需求。 SQL中合并结果集,主要就是用
UNION
,简单来说,就是把两个或多个
SELECT
语句的结果堆叠在一起。但要注意,不是随便什么结果都能合并的,列的数量和数据类型得对得上。 解决方案
UNION
操作符主要有两种用法:
UNION
和
UNION ALL
。
UNION
: 这个会去除重复的行,相当于
DISTINCT
操作,所以性能会稍微慢一点。
UNION ALL
: 这个会保留所有行,包括重复的,所以性能更好。如果你确定结果集里不会有重复数据,或者重复数据没关系,那就用
UNION ALL
。 基本语法是这样的:
SELECT column1, column2 FROM table1 UNION [ALL] SELECT column1, column2 FROM table2;
举个例子,假设我们有两个表,
customers_europe
和
customers_america
,结构一样,都包含
customer_id
和
customer_name
两列。
-- 创建示例表 CREATE TABLE customers_europe ( customer_id INT, customer_name VARCHAR(255) ); CREATE TABLE customers_america ( customer_id INT, customer_name VARCHAR(255) ); -- 插入一些数据 INSERT INTO customers_europe (customer_id, customer_name) VALUES (1, 'Alice'), (2, 'Bob'); INSERT INTO customers_america (customer_id, customer_name) VALUES (3, 'Charlie'), (1, 'Alice'); -- 注意这里有重复的 customer_id
如果我们想把这两个表的数据合并在一起,可以使用
UNION
:
SELECT customer_id, customer_name FROM customers_europe UNION SELECT customer_id, customer_name FROM customers_america;
结果会是:
customer_id | customer_name -------------|-------------- 1 | Alice 2 | Bob 3 | Charlie
可以看到,重复的
(1, 'Alice')
被去掉了。 如果我们用
UNION ALL
:
SELECT customer_id, customer_name FROM customers_europe UNION ALL SELECT customer_id, customer_name FROM customers_america;
结果会是:
customer_id | customer_name -------------|-------------- 1 | Alice 2 | Bob 3 | Charlie 1 | Alice
重复的
(1, 'Alice')
被保留了。 结果集合并时列名不一致怎么办? 有时候,两个
SELECT
语句的列名可能不一样,但实际上它们代表的是相同的信息。这时候,
UNION
会使用第一个
SELECT
语句的列名作为结果集的列名。 比如,
customers_europe
表的
customer_name
列叫
name
:
SELECT customer_id, name AS customer_name FROM customers_europe UNION SELECT customer_id, customer_name FROM customers_america;
结果集的列名会是
customer_id
和
customer_name
。重要的是,列的顺序和数据类型要匹配。 如何在合并结果集后排序? 可以在
UNION
语句的最后加上
ORDER BY
子句。注意,
ORDER BY
只能放在整个
UNION
语句的最后,不能放在单个
SELECT
语句里。
SELECT customer_id, customer_name FROM customers_europe UNION SELECT customer_id, customer_name FROM customers_america ORDER BY customer_name;
这样,结果集会按照
customer_name
列排序。
UNION
和
JOIN
的区别是什么?什么时候用哪个?
UNION
是用来合并 行 的,把两个或多个结构相似的结果集堆叠在一起。
JOIN
是用来合并 列 的,把两个或多个表基于某些关联条件连接在一起。 简单来说,如果你的数据分布在不同的表里,但它们代表的是同一种实体(比如上面例子里的客户),你需要把它们合并成一个结果集,那就用
UNION
。如果你的数据分布在不同的表里,它们代表的是不同的实体,但它们之间有关联关系(比如客户和订单),你需要把它们的信息合并在一起,那就用
JOIN
。

相关文章