Оператор EXCEPT позволяет найти разность двух выборок, то есть те строки которые есть в первой выборке, но которых нет во второй. Для его использования применяется следующий формальный синтаксис:
1
2
| SELECT_выражение1EXCEPT SELECT_выражение2 |
Для примера возьмем таблицы из прошлой темы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| USE usersdb;CREATE TABLE Customers( Id INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(20) NOT NULL, LastName NVARCHAR(20) NOT NULL, AccountSum MONEY);CREATE TABLE Employees( Id INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(20) NOT NULL, LastName NVARCHAR(20) NOT NULL,);INSERT INTO Customers VALUES('Tom', 'Smith', 2000),('Sam', 'Brown', 3000),('Mark', 'Adams', 2500),('Paul', 'Ins', 4200),('John', 'Smith', 2800),('Tim', 'Cook', 2800)INSERT INTO Employees VALUES('Homer', 'Simpson'),('Tom', 'Smith'),('Mark', 'Adams'),('Nick', 'Svensson') |
Таблица Employees содержит данные обо всех сотрудниках банка, а таблица Customers - обо всех клиентах. Но сотрудники банка могут также быть его клиентами. И допустим, нам надо найти всех клиентов банка, которые не являются его сотрудниками:
1
2
3
4
| SELECT FirstName, LastNameFROM CustomersEXCEPT SELECT FirstName, LastName FROM Employees |

Подобным образом можно получить всех сотрудников банка, которые не являются его клиентами:
1
2
3
4
| SELECT FirstName, LastNameFROM EmployeesEXCEPT SELECT FirstName, LastName FROM Customers |

Комментариев нет:
Отправить комментарий