SQL面试题更新 2026-08-03

在 SQL 查询中,UNION 与 UNION ALL 两者的差异体现在哪些方面?实际业务环境中应依据什么条件来选择采用哪一个操作符?

考察说明

考查对 SQL 集合操作符 UNION 与 UNION ALL 核心差异的理解及实际选型依据。

回答思路

  1. 【回答框架 1】UNION 与 UNION ALL 都用于合并多个 SELECT 查询的结果集,但关键区别在于是否去重:UNION 会去除结果集中的重复行,而 UNION ALL 保留所有行,不去重。这导致两者在返回数据量和性能上有明显差异。
  2. 【回答框架 2】性能方面,UNION 由于需要执行去重操作,通常涉及排序或哈希操作,消耗更多 CPU 和内存资源,执行速度较慢;UNION ALL 直接拼接结果,无额外开销,性能更高。在数据量较大时,这种差距更加显著。
  3. 【回答框架 3】选择依据:当业务逻辑要求结果集中不能有重复记录时,使用 UNION;当不需要去除重复行,或者明确知道不会有重复数据时,优先选择 UNION ALL 以提升查询效率。此外,若在合并前已通过条件过滤确保无重复,可选用 UNION ALL。
  4. 【回答框架 4】需确保两个查询的列数相同且对应列的数据类型兼容,UNION 和 UNION ALL 均遵循此规则。列名以第一个查询的列名为准。排序时,ORDER BY 应置于整个集合操作的最后。
  5. 【回答框架 5】实际场景示例:合并来自不同分区的年度销售数据且无需去重,用 UNION ALL;当需要合并多张表中的不重复客户列表时,用 UNION。
  6. 【关键点 1】UNION 自动去重,UNION ALL 不去重。
  7. 【关键点 2】UNION 性能低于 UNION ALL,因去重带来额外开销。
  8. 【关键点 3】无重复需求时优先用 UNION ALL 提升效率。
  9. 【关键点 4】两查询列数及数据类型必须匹配。
  10. 【关键点 5】ORDER BY 只能在集合操作末尾使用一次。
  11. 【易错点 1】误以为 UNION ALL 也会去重,导致结果中出现重复数据。
  12. 【易错点 2】在数据量大的情况下盲目使用 UNION,忽视去重带来的性能开销。
  13. 【易错点 3】未保证列数一致,导致查询运行时错误。