SQL Server Except(差积)运算符

在本教程中,将学习如何使用SQL Server EXCEPT从另一个查询的另一个结果集中减去查询的结果集。

SQL Server EXCEPT简介

SQL Server EXCEPT比较两个查询的结果集,并返回第一个查询中不是由第二个查询输出的不同行。 换句话说,EXCEPT从一个查询结果中减去另一个查询的结果集。

以下是SQL Server EXCEPT的语法:

query_1
EXCEPT
query_2

以下是在上述语法中组合两个查询的结果集的规则:

  • 两个查询中列的数量和顺序必须相同。
  • 相应列的数据类型必须相同或兼容。

下图显示了两个结果集T1T2EXCEPT操作:

在此图中:

  • T1结果集包括:1,23
  • T2结果集包括:2,34

T1T2差集结果将返回1,它是在T1结果集中,并T2结果集中没有出现的行。

SQL Server EXCEPT示例

请参阅示例数据库中的两个表productsorder_items

1. 简单EXCEPT示例
以下示例使用EXCEPT运算符查找没有销售的产品:

SELECT
    product_id
FROM
    production.products
EXCEPT
SELECT
    product_id
FROM
    sales.order_items;

执行上面查询语句,得到以下结果:

在此示例中,第一个查询返回所有产品。 第二个查询返回有销售额的产品。 因此,结果集仅包括没有销售的产品。

2. EXCEPT ORDER BY示例

要对EXCEPT运算符创建的结果集进行排序,可在最后一个查询中添加ORDER BY子句。 例如,以下示例查找没有销售的产品,并按ID按升序对产品进行排序。

SELECT
    product_id
FROM
    production.products
EXCEPT
SELECT
    product_id
FROM
    sales.order_items
ORDER BY 
    product_id;

执行上面查询语句,得到以下结果:
EXCEPT ORDER BY示例


上一篇: SQL Server集合操作符 下一篇: SQL Server约束