SQL 中的 UNION 和 INTERSECT 是集合操作,用于组合或比较两个 SELECT 语句的结果。UNION 将两个查询的结果合并到一个数据集中,默认移除重复行。而 INTERSECT 则只返回同时存在于两个查询结果中的行。虽然这两个操作都要求 SELECT 语句具有相同数量的列和兼容的数据类型,但它们的用途截然不同:UNION 用于聚合数据,而 INTERSECT 用于过滤出重叠部分。
举例说明,考虑两个表:employees_sales
和 employees_marketing
。使用 UNION
,您可以合并两个表中的姓名:
SELECT name FROM employees_sales
UNION
SELECT name FROM employees_marketing;
这将返回两个部门中所有唯一的姓名。如果“Alice”同时出现在两个表中,她将只列出一次。要包含重复项,请使用 UNION ALL
。相比之下,INTERSECT
用于查找共同的条目:
SELECT name FROM employees_sales
INTERSECT
SELECT name FROM employees_marketing;
在这里,只返回同时存在于两个表中的姓名(例如“Alice”)。与 UNION 不同,INTERSECT 侧重于共享数据,而不是合并数据集。
关键考虑因素包括处理重复项和列兼容性。UNION 优先考虑广度,用于合并数据以生成报告或聚合视图。INTERSECT 范围较窄,适用于验证(例如,查找重叠客户)。并非所有 SQL 方言都支持 INTERSECT(例如,MySQL 不支持),因此可能需要 JOIN 或 EXISTS 等替代方法。这两个操作都需要对齐的列,但服务于相反的目标:UNION 扩展结果,而 INTERSECT 将结果限制为共同项。理解这些区别有助于为数据分析或集成任务选择合适的工具。