7.16 SQL Server EXCEPT(补集)
SQL Server EXCEPT
简介
SQL Server EXCEPT
比较两个查询的结果集,并返回第一个查询中未出现在第二个查询中行。换句话说,EXCEPT
返回的是query_1-query_2
语法:
query_1
EXCEPT
query_2
此语法中:
- 两个查询中列的数量和顺序必须相同。
- 对应列的数据类型必须相同或兼容。
下图显示了两个结果集T1和T2的除运算:
图中:
- T1包括1、2和3。
- T2包括2、3和4。
T1和T2的EXCEPT
返回1,这是T1结果集中不出现在T2结果集中的不同行。
示例
有如下产品和订单项表:
A)EXCEPT简单示例
使用EXCEPT运算符查找没有销售的产品:
SELECT
product_id
FROM
production.products
EXCEPT
SELECT
product_id
FROM
sales.order_items;
本例中,第一个查询返回所有产品。第二个查询返回销售过的产品。因此,结果仅包括没有销售的产品。
B)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;