Oracle minus(取差集)、intersect(取交集) 区别 ?
参考回答:
在 Oracle 中,MINUS
和 INTERSECT
都是用于操作查询结果集合的集合运算符,但它们的功能和作用有显著区别。
MINUS
(取差集):返回第一个查询结果中存在的行,但不在第二个查询结果中出现的行。换句话说,MINUS
会从第一个查询结果中移除第二个查询结果中的相同记录,返回的是第一个查询中的差集部分。示例:
SELECT column_name FROM table1 MINUS SELECT column_name FROM table2;
这个查询会返回在
table1
中存在,但在table2
中不存在的所有column_name
值。-
INTERSECT
(取交集):返回两个查询结果集中的共同部分,即两个查询中都出现的相同行。INTERSECT
运算符仅返回两个查询的交集部分。示例:
SELECT column_name FROM table1 INTERSECT SELECT column_name FROM table2;
这个查询会返回在
table1
和table2
中都存在的所有column_name
值。
详细讲解与拓展:
-
MINUS
的特点:- 差集:
MINUS
用于返回第一个查询的结果中不在第二个查询结果中的部分,简而言之,MINUS
计算的是“去除掉的部分”。 - 去重:
MINUS
会自动去除重复行,并且只返回唯一的差集行。 - 应用场景:适用于找出两个结果集之间的不同部分。例如,找出一组学生名单中已经毕业的学生,但不再其他名单中出现的学生。
示例:
SELECT employee_id FROM employees MINUS SELECT employee_id FROM contractors;
这个查询将返回那些在
employees
表中,但不在contractors
表中的员工 ID。 - 差集:
-
INTERSECT
的特点:- 交集:
INTERSECT
返回两个查询结果集的共同部分,换句话说,它计算的是两个查询中的交集。 - 去重:
INTERSECT
会自动去重,返回结果中不会有重复的记录。 - 应用场景:适用于找出两个数据集合中的共同部分。例如,找出同时属于多个部门的员工。
示例:
SELECT employee_id FROM employees INTERSECT SELECT employee_id FROM contractors;
这个查询将返回那些既是正式员工,也同时是承包商的员工 ID。
- 交集:
-
差异与相似之处:
- 差集 vs 交集:
MINUS
返回的是一个查询结果中存在,而另一个查询结果中没有的部分,而INTERSECT
返回的是两个查询结果中都有的部分。 - 去重:无论是
MINUS
还是INTERSECT
,都默认会去除重复的行,返回的是唯一的结果集合。 - 用法:这两个操作符都用于多个查询结果集之间的比较,帮助筛选出有差异的部分或共有的部分。
- 差集 vs 交集:
- 执行顺序:
- 在多个集合运算符(如
UNION
、INTERSECT
、MINUS
)联合使用时,Oracle SQL 依据操作顺序来计算结果。通常,INTERSECT
和MINUS
的运算符会比其他查询运算符优先执行。若要控制优先顺序,通常可以使用括号来明确执行顺序。
- 在多个集合运算符(如
总结:
MINUS
用于获取两个查询结果之间的差集,返回第一个查询中有而第二个查询中没有的记录。INTERSECT
用于获取两个查询结果之间的交集,返回两个查询中都有的记录。
这两个操作符是集合运算符,在数据分析和比较中非常有用,帮助我们快速找出数据集之间的异同。