在本教程中,您将学习如何使用SQL MINUS
运算符从另一个结果集中减去一个结果集。
1. SQL MINUS运算符简介
除了UNION,UNION ALL和INTERSECT运算符之外,SQL还为我们提供了MINUS
运算符,用于从另一个结果集中减去一个结果集。
以下是MINUS
运算符的语法。
SELECT
id
FROM
A
MINUS
SELECT
id
FROM
B;
要使用MINUS
运算符,可以编写单独的SELECT
语句并将MINUS
运算符放在它们之间。 MINUS
运算符返回第一个查询生成的唯一行,但不返回第二个查询生成的唯一行。
下图是MINUS
运算符的说明。
为了获得结果集,数据库系统执行两个查询并从第二个查询中减去第一个查询的结果集。
要使用MINUS
运算符,SELECT
子句中的列必须匹配,并且必须具有相同或至少可转换的数据类型。
我们经常在ETL
中使用MINUS
运算符。 ETL是数据仓库系统中的软件组件。 ETL代表Extract,Transform和Load。 ETL负责将数据从源系统加载到数据仓库系统。
完成加载数据后,可以使用MINUS
运算符通过从源系统中的数据中减去目标系统中的数据来确保数据已完全加载。
2. SQL MINUS示例
请考虑示例数据库中的 employees
和 dependents
表,它们的关系如下所示:
每个员工都有零个或多个家属,而每个员工依赖于一个且只有一个员工。 家属与员工之间的关系是一对多的关系。
dependents
表中的employee_id
列引用employees
表中的employee_id
列。
可以使用MINUS
运算符查找没有任何家属的员工。 要执行此操作,请从dependents
表中的employee_id
结果集中减去employees
表中的employee_id
结果集。
以下查询实现了这个想法:
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents;
执行上面查询语句,得到以下结果:
2.1. SQL MINUS使用ORDER BY示例
要对MINUS
运算符返回的结果集进行排序,请将ORDER BY子句放在最后一个SELECT
语句的末尾。
例如,要对没有任何家属的员工进行排序,请使用以下查询:
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents
ORDER BY employee_id;
执行上面查询语句,得到以下结果:
通过本文的学习,现在您应该对SQL MINUS
运算符有一个很好的理解,并知道如何应用它来比较两个结果集。