SQL union,union all,sql临时表

本文分享了一次后台项目中遇到的多表查询及求和问题解决过程。作者介绍了如何通过创建临时表来处理不同结构的数据表,并利用union操作符合并结果集,最后通过sum函数实现了对特定列的求和。

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

    第一次做网站的后台的项目,在做的过程中遇到了很多的问题,首先就是有一个函数要进行多张表的查询,然后再进行对其中的列进行求和运算

但是有一个问题就是在其中一张表上的数据比较多,而且这三张表的字段并不相同,所以首先分别对这三张表进行处理,把处理的结果放入三张临

时表里面 这里记录一下创建临时表的方法:

       select * into #临时表名 from 你的表;    select * into ##临时表名 from 你的表;  

 或者:create table #临时表名(字段1 约束条件)    create table ##临时表名(字段1 约束条件....)    

PS:以上的#代表局部临时表,##代表全局临时表

 我用的是创建列名不确定的临时表,第一种方法,创建的三张表比如命名为 f1,f2,f3,同时在创建临时表的时候我为相应的列添加同样的别名,这样在使用

union连接的时候就不用考虑字段不同了,

   给表格中的列添加别名:用 as 语句

但是在创建临时表的过程中出现了一个问题,就是在创建第二个临时表的时候它老是在select下面提示应该为ID ,AS 什么的,后来添加了as作为另一个临时表的、

别名,才停止这个错误

然后是通过union将三张临时表 合并在一起,并不像join连接到一块

select 
-- last_table.rectime,
-- SUM (last_table.power) 
-- from (
-- select 
-- #firetempoary.rectime, 
-- #firetempoary.power 
-- from #firetempoary
-- union all

-- select 
-- #othertemporary.rectime,
-- #othertemporary.power 
-- from #othertemporary
-- union all

-- select 
-- #interRegional.rectime,
-- #interRegional.power 
-- from #interRegional
-- ) as last_table
-- group by last_table.rectime

对了这个也要加一个as别名

然后同时通过sum函数求和通过group by 进行分组

### SQL UNIONUNION ALL 的区别 #### 1. 定义与功能 SQL 中的 `UNION` 和 `UNION ALL` 都用于合并两个或多个 SELECT 查询的结果集。然而,它们在处理重复行时的行为不同。`UNION` 会自动去除结果集中的重复行[^2],而 `UNION ALL` 则保留所有行,包括重复的行[^4]。 #### 2. 性能差异 由于 `UNION` 需要额外的排序和去重操作,其性能通常低于 `UNION ALL`[^1]。如果查询结果中不包含重复行,或者重复行的存在不影响业务逻辑,则应优先使用 `UNION ALL` 以提高查询效率。 #### 3. 语法示例 以下是 `UNION` 和 `UNION ALL` 的语法及示例: ##### UNION 示例 ```sql SELECT column_name(s) FROM table_name1 WHERE column_name = value1 UNION SELECT column_name(s) FROM table_name2 WHERE column_name = value2; ``` ##### UNION ALL 示例 ```sql SELECT column_name(s) FROM table_name1 WHERE column_name = value1 UNION ALL SELECT column_name(s) FROM table_name2 WHERE column_name = value2; ``` 上述代码展示了如何使用 `UNION` 和 `UNION ALL` 合并来自两个表的结果集[^4]。 #### 4. 使用场景 - 当需要确保结果集中没有重复行时,应使用 `UNION`[^2]。 - 当希望保留所有行且无需去重时,应使用 `UNION ALL`[^1]。 #### 5. 示例对比 以下是一个具体的对比示例,展示 `UNION` 和 `UNION ALL` 的行为差异: 假设存在两个临时表 `#T1` 和 `#T2`,分别插入如下数据: ```sql CREATE TABLE #T1 (data VARCHAR(10)); INSERT INTO #T1 SELECT 'abc' UNION ALL SELECT 'bcd' UNION ALL SELECT 'cde' UNION ALL SELECT 'def' UNION ALL SELECT 'efg'; CREATE TABLE #T2 (data VARCHAR(10)); INSERT INTO #T2 SELECT 'abc' UNION ALL SELECT 'cde' UNION ALL SELECT 'efg'; ``` 执行以下查询: ##### 使用 UNION ```sql SELECT data FROM #T1 UNION SELECT data FROM #T2; ``` 结果为: ``` abc bcd cde def efg ``` ##### 使用 UNION ALL ```sql SELECT data FROM #T1 UNION ALL SELECT data FROM #T2; ``` 结果为: ``` abc bcd cde def efg abc cde efg ``` 从结果可以看出,`UNION` 去除了重复的行,而 `UNION ALL` 保留了所有行[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_Yoda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值