SQL 减号运算符

摘要:在本教程中,您将学习如何使用 SQL 减号运算符从一个结果集中减去另一个结果集。

SQL 减号运算符简介

除了 UNIONUNION ALLINTERSECT 运算符之外,SQL 向我们提供了 减号运算符,它允许您从一个结果集中减去另一个结果集。

下面说明了减号运算符的语法。

SELECT
	id
FROM
	A 
MINUS 
SELECT
	id
FROM
	B;Code language: SQL (Structured Query Language) (sql)

要使用减号运算符,您编写单独的 SELECT 语句,并在其之间放置减号运算符。减号运算符返回第一个查询而不具有第二个查询产生但唯一的行。

下图说明了减号运算符。

SQL MINUS

为了生成结果集,数据库系统执行两个查询,然后从第二个查询的结果集中减去第一个查询的结果集。

为了使用减号运算符,SELECT 子句中的列在数量上必须匹配,并且必须具有相同或至少可转换的数据类型。

我们在 ETL 中经常使用减号运算符。ETL 是数据仓库系统中的软件组件。ETL 表示提取、转换和加载。ETL 负责将数据从源系统加载到数据仓库系统中。

在完成加载数据后,我们可以使用减号运算符,通过从源系统中的数据中减去目标系统中的数据,来确保数据完整加载。

SQL 减号运算符示例

考虑在 示例数据库 中的以下 employeesdependents 表。

employees_dependents_tables

每位员工都有零个或多个家属,而每个家属只依赖于一个员工。家属与员工之间的关系是一对多的关系。

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)
SQL MINUS example

带有 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 MINUS ORDER BY example

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

本教程是否有帮助?