首页 > 数据库 > SQL > 正文

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

裘德小鎮的故事
发布: 2025-07-06 13:38:01
原创
665人浏览过

sql中合并结果集主要使用union操作符,分为union和union all两种用法。1. union会去除重复行,性能较慢;2. union all保留所有行,包括重复数据,性能更好。两者均要求合并的列数量和数据类型一致。若列名不一致,结果集列名以第一个select语句为准,可通过别名统一。合并后排序需在最后使用order by子句。union用于合并结构相似的多个结果集为一个,适用于相同实体分布在不同表的情况;join则用于基于关联条件连接不同表的不同实体,是列的合并而非行的堆叠。正确选择union或join取决于数据关系及需求。

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

SQL中合并结果集,主要就是用UNION,简单来说,就是把两个或多个SELECT语句的结果堆叠在一起。但要注意,不是随便什么结果都能合并的,列的数量和数据类型得对得上。

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

解决方案

UNION操作符主要有两种用法:UNION和UNION ALL。

sql中如何合并结果集 结果集合并的union用法详解
  • UNION: 这个会去除重复的行,相当于DISTINCT操作,所以性能会稍微慢一点。
  • UNION ALL: 这个会保留所有行,包括重复的,所以性能更好。如果你确定结果集里不会有重复数据,或者重复数据没关系,那就用UNION ALL。

基本语法是这样的:

sql中如何合并结果集 结果集合并的union用法详解
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。

以上就是sql中如何合并结果集 结果集合并的union用法详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号