在本教程中,将学习如何使用SQL Server EXCEPT
从另一个查询的另一个结果集中减去查询的结果集。
SQL Server EXCEPT简介
SQL Server EXCEPT
比较两个查询的结果集,并返回第一个查询中不是由第二个查询输出的不同行。 换句话说,EXCEPT
从一个查询结果中减去另一个查询的结果集。
以下是SQL Server EXCEPT
的语法:
query_1
EXCEPT
query_2
以下是在上述语法中组合两个查询的结果集的规则:
- 两个查询中列的数量和顺序必须相同。
- 相应列的数据类型必须相同或兼容。
下图显示了两个结果集T1
和T2
的EXCEPT
操作:
在此图中:
T1
结果集包括:1
,2
和3
。T2
结果集包括:2
,3
和4
。
T1
和T2
差集结果将返回1
,它是在T1
结果集中,并T2
结果集中没有出现的行。
SQL Server EXCEPT示例
请参阅示例数据库中的两个表products
和order_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;
执行上面查询语句,得到以下结果: