SQL Server 将两张表合并成一张表
在数据库管理与开发过程中,将两张表的数据合并为一张表是极为常见的操作需求。下面直接给出核心SQL语句:

- 若希望保留全部数据(包括重复行):
select * from T1 union all select * from T2
- 若需要自动去除重复记录(仅保留不重复的行):
select * from T1 union select * from T2
这两种合并方式的关键区别在于所使用的运算符:
union:取并集并自动去重(相当于内置了 DISTINCT 操作),同时会按默认顺序对结果进行排序。union all:取并集但保留所有行,包括重复数据,且不进行排序——由于省去了去重和排序步骤,性能通常优于 union。
两张表示例
table1:dbo.[Druglist1]table2:dbo.[Druglist2]
如果希望将 table1 中的数据追加到 table2 中,可以使用 INSERT INTO ... SELECT 语句:
insert into table2(字段1,字段2) select 字段1,字段2 from table1
注意:
务必逐一列出所有字段名称,自增字段(自动编号)无法直接写入,除非编写逐条处理的算法。
将table1的数据插入到table2中
1. 最简洁直接的方法:
insert into table2 select * from table1
具体示例:
insert into dbo.[Druglist2] select * from dbo.[Druglist1]
2. 另一种常用方式:创建新表并同时合并数据
select * into newtable from (select * from table1 union all select * from table2)
对应示例:
select * into dbo.[Drug list4] from (select * from dbo.[Drug list1] union all select * from dbo.[Drug list2]) a
注意:括号后的 a 是为子查询指定的别名,必须添加。若不提供别名,SQL Server 会因无法识别子查询的表名而报错。
总结
以上即为 SQL Server 中将两张表合并为一张表的两种核心思路:使用 UNION / UNION ALL 进行查询合并,以及使用 INSERT INTO ... SELECT 实现数据追加。在实际使用中,可根据是否需要去重、是否创建新表等需求灵活选用相应方法。
