在本教程中,将学习如何使用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;
执行上面查询语句,得到以下结果:
						上一篇:
								SQL Server集合操作符
												下一篇:
								SQL Server约束
												
						
						
					
					
					