摘要:在本教程中,您将学习如何使用 SQL 减号运算符从一个结果集中减去另一个结果集。
SQL 减号运算符简介
除了 UNION
、UNION ALL
和 INTERSECT
运算符之外,SQL 向我们提供了 减号运算符,它允许您从一个结果集中减去另一个结果集。
下面说明了减号运算符的语法。
SELECT
id
FROM
A
MINUS
SELECT
id
FROM
B;
Code language: SQL (Structured Query Language) (sql)
要使用减号运算符,您编写单独的 SELECT
语句,并在其之间放置减号运算符。减号运算符返回第一个查询而不具有第二个查询产生但唯一的行。
下图说明了减号运算符。

为了生成结果集,数据库系统执行两个查询,然后从第二个查询的结果集中减去第一个查询的结果集。
为了使用减号运算符,SELECT
子句中的列在数量上必须匹配,并且必须具有相同或至少可转换的数据类型。
我们在 ETL 中经常使用减号运算符。ETL 是数据仓库系统中的软件组件。ETL 表示提取、转换和加载。ETL 负责将数据从源系统加载到数据仓库系统中。
SQL 减号运算符示例
考虑在 示例数据库 中的以下 employees
和 dependents
表。

每位员工都有零个或多个家属,而每个家属只依赖于一个员工。家属与员工之间的关系是一对多的关系。
dependents
表中的 employee_id
列引用 employees
表中的 employee_id
列。
您可以使用减号运算符来找出没有任何家属的员工。为此,您从 employees
表中的 employee_id
结果集中减去 dependents
表中的 employee_id
结果集。
以下查询说明了这一概念
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents;
Code language: SQL (Structured Query Language) (sql)

带有 ORDER BY 的 SQL 减号运算符示例
要 对减号运算符返回的结果集进行排序,您将 ORDER BY
子句放在最后一个 SELECT
语句的末尾。
例如,要对没有家属的员工进行排序,可以使用以下查询
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents
ORDER BY employee_id;
Code language: SQL (Structured Query Language) (sql)

现在,您应该对 SQL 减号运算符有了很好的理解,并且了解如何应用它来比较两个结果集。