SQL Server (Transact-SQL) EXCEPT 关键字用于比较两个或多个 SELECT 语句。它返回第一个结果集中未出现在第二个结果集中的所有记录。
使用 EXCEPT 关键字时,必须满足以下条件:
- 每个 SELECT 语句中的列数应该相等。
- 每个 SELECT 语句中的列的数据类型应该匹配。
- 每个 SELECT 语句中的列顺序应该匹配。
语法
在 SQL Server (Transact-SQL) 中使用 EXCEPT 关键字的语法如下:
SELECT column1, column2, ... FROM table1
EXCEPT
SELECT column1, column2, ... FROM table2
示例:
考虑名为Product和Inventory 的数据库表,包含以下记录:
表 1:Product 表
Name | Brand | Price | Quantity |
---|---|---|---|
Apple | Delicious | 1.5 | 40 |
Apple | Harvest | 1.6 | 50 |
Orange | Delicious | 2.0 | 40 |
Orange | Harvest | 1.9 | 50 |
Watermelon | LocalFarm | 4.0 | 50 |
Mango | LocalFarm | 3.5 | 60 |
表2:Inventory 表
Name | Brand | Price | Quantity |
---|---|---|---|
Apple | Delicious | 1.5 | 20 |
Orange | LocalFarm | 2.0 | 40 |
Watermelon | LocalFarm | 4.0 | 20 |
使用EXCEPT关键字:要获取两个记录集中都不存在的Name列的记录,可以使用以下查询:
SELECT Name FROM Product
EXCEPT
SELECT Name FROM Inventory
ORDER BY Name;
这将产生如下所示的结果:
Name |
---|
Mango |
在 WHERE 子句中使用 EXCEPT 关键字: 获取 Name 的记录 列在指定条件的两个记录集中都不存在,可以使用以下查询:
SELECT Name FROM Product
EXCEPT
SELECT Name FROM Inventory
WHERE Quantity < 30
ORDER BY Name;
这将产生以下结果:
Name |
---|
Mango |
Orange |
在多列中使用 EXCEPT 关键字: 获取 Name 和 Brand 列中不存在的记录存在于两个记录集中,可以使用以下查询:
SELECT Name, Brand FROM Product
EXCEPT
SELECT Name, Brand FROM Inventory
ORDER BY Name;
这将产生以下结果:
Name | Brand |
---|---|
Apple | Harvest |
Mango | LocalFarm |
Orange | Delicious |
Orange | Harvest |