Access 2010中如何合并数据表?新手求助SQL编写方法
Access合并数据表的SQL写法指南
嘿,刚接触Access的话,合并数据表其实分两种常见场景——要么是把两个结构相近的表的记录凑到一起(追加式合并),要么是根据共同字段把两个表的关联数据拼到一行(关联式合并),我给你把每种场景的SQL写法都讲明白:
场景1:合并结构相同的表(追加所有记录)
这种情况适合两个表的字段数量、数据类型都一致的场景,比如你有两个年度销售记录表,要把它们的记录合并成一个完整列表。
常用语句:UNION ALL(保留所有记录,效率更高)
如果不需要去重,优先用这个,它会把两个表的所有记录直接合并,不会做额外的去重校验:
SELECT 订单ID, 客户名称, 订单金额 FROM 销售表_2023 UNION ALL SELECT 订单ID, 客户名称, 订单金额 FROM 销售表_2024;
去重合并:UNION
如果两个表存在重复记录(比如同一条订单被误录入到两个表),用UNION会自动去掉重复项,但因为要做去重校验,效率比UNION ALL低一些:
SELECT 订单ID, 客户名称, 订单金额 FROM 销售表_2023 UNION SELECT 订单ID, 客户名称, 订单金额 FROM 销售表_2024;
⚠️ 注意:两个表的字段数量必须完全一致,对应位置的字段数据类型也要匹配,不然会直接报错。
场景2:关联两个表(按共同字段合并数据)
这种情况是把两个表的关联数据拼在同一行,比如你有员工表和部门表,要把每个员工对应的部门信息一起查出来。
内连接(只保留两边都匹配的记录)
只有当两个表的关联字段都有对应值时,这条记录才会出现在结果里——比如只显示有对应部门的员工:
SELECT 员工表.员工ID, 员工表.姓名, 部门表.部门名称 FROM 员工表 INNER JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID;
左连接(保留左表所有记录,右表不匹配则显示空值)
不管右表有没有匹配的记录,左表的所有记录都会保留,右表没有匹配的字段会显示Null——比如显示所有员工,哪怕有些员工还没分配部门:
SELECT 员工表.员工ID, 员工表.姓名, 部门表.部门名称 FROM 员工表 LEFT JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID;
右连接(保留右表所有记录,左表不匹配则显示空值)
和左连接逻辑相反,保留右表的所有记录,左表没有匹配的字段显示Null——比如显示所有部门,哪怕有些部门还没有员工:
SELECT 员工表.员工ID, 员工表.姓名, 部门表.部门名称 FROM 员工表 RIGHT JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID;
额外技巧:把合并结果存为新表
如果想把合并后的结果永久保存成一个新表,可以用SELECT INTO语句,比如:
-- 合并两个销售表到新表 SELECT 订单ID, 客户名称, 订单金额 INTO 合并销售总表 FROM 销售表_2023 UNION ALL SELECT 订单ID, 客户名称, 订单金额 FROM 销售表_2024; -- 关联员工和部门表并存为新表 SELECT 员工表.员工ID, 员工表.姓名, 部门表.部门名称 INTO 员工部门关联表 FROM 员工表 INNER JOIN 部门表 ON 员工表.部门ID = 部门表.部门ID;
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

