Оператор EXCEPT позволяет найти разность двух выборок, то есть те строки которые есть в первой выборке, но которых нет во второй. Для его использования применяется следующий формальный синтаксис:
1
2
| SELECT_выражение1 EXCEPT 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, LastName FROM Customers EXCEPT SELECT FirstName, LastName FROM Employees |
Подобным образом можно получить всех сотрудников банка, которые не являются его клиентами:
1
2
3
4
| SELECT FirstName, LastName FROM Employees EXCEPT SELECT FirstName, LastName FROM Customers |
Комментариев нет:
Отправить комментарий