union all 与 union 的区别

本文详细解析了SQL中Union与Union All的区别及使用场景。Union All直接合并两个查询结果,可能存在重复数据,但效率较高;Union则会移除重复记录,确保数据唯一性,相对耗时较长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

union all  先看示例

table1 数据如下:

 张三

 李四

table2 数据如下:

 李四

 王五

select * from table1 union all select * from table2;

结果如下:

张三

李四

李四

王五



union all  先看示例

table1 数据如下:

 张三

 李四

table2 数据如下:

 李四

 王五

select * from table1 union  select * from table2;

结果如下:

张三

李四

王五


1、union all 取两个表的并集数据,查到数据直接返回所有数据,效率相对高,存在擁余数据;

2、union 取数据交集数据,查出数据后需要去除重复数据,效率相对较低,不会出现绝对的擁余数据;





`UNION ALL` 和 `UNION` 都是用来合并两个或多个 SELECT 查询结果集的操作符,但是它们之间有一个关键的区别:**是否去除重复行**。 ### UNION 的工作原理 - **去重功能**:`UNION` 默认会自动删除查询结果中的重复行,只保留唯一的结果。这意味着它会在内部对所有的结果进行排序和比较,并过滤掉完全相同的记录。 - **性能开销**:由于要去除重复项,所以 `UNION` 可能在处理大数据量时效率较低,因为涉及到额外的排序及对比操作。 ```sql SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; ``` 上述 SQL 语句将返回来自 `table1` 和 `table2` 中指定列的所有非重复组合值。 ### UNION ALL 的工作原理 - **不去重**: `UNION` 相反,`UNION ALL` 不会对结果做任何去重处理,而是简单地把所有符合条件的数据都添加到一起,不论是否有重复。 - **高性能**:正因为不需要执行去重步骤,所以在一般情况下比使用 `UNION` 更快、更高效,尤其是在涉及大量数据的时候。 ```sql SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; ``` 这条命令会直接叠加两个表中指定列的内容,包括那些可能存在的相同记录。 ### 示例说明 假设我们有两个表格分别存储了某公司员工的基本工资 (`salary_basic`) 和奖金 (`bonus`) 记录: | employee_id | salary_basic | |--|--------------| | 1 | 5000 | | 2 | 6000 | | employee_id | bonus | |--|--------------| | 1 | 1000 | | 3 | 1500 | 如果我们想获取每位员工的实际收入(基本工资 + 奖金),可以使用这两种方式之一来实现: #### 使用 UNION (假设没有重复ID) ```sql SELECT employee_id, salary_basic AS total_income FROM salary_basic_table UNION SELECT employee_id, bonus AS total_income FROM bonus_table; ``` 这只会显示每个 ID 对应的最大一笔金额,因为它默认消除了重复的行。(注意这里仅用于演示目的,在实际应用中应当计算总额而不是简单的拼接) #### 使用 UNION ALL ```sql SELECT employee_id, salary_basic AS income FROM salary_basic_table UNION ALL SELECT employee_id, bonus AS income FROM bonus_table; ``` 这样做则不会消除重复项,因此对于employee_id=1会有两条记录出现;同时也能反映出该名员工既有固定薪资又有额外奖励的事实。 选择哪一个取决于您的业务需求以及希望得到什么样的最终数据视图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值