Оператор EXCEPT позволяет найти разность двух выборок, то есть те строки которые есть в первой выборке, но которых нет во второй. Для его использования применяется следующий формальный синтаксис:
SELECT_выражение1 EXCEPT SELECT_выражение2
Для примера возьмем таблицы из прошлой темы:
DROP TABLE IF EXISTS clients;
DROP TABLE IF EXISTS employees;
CREATE TABLE clients
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
account_sum INTEGER NOT NULL
);
CREATE TABLE employees
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
);
INSERT INTO clients(name, age, account_sum)
VALUES
('Tom', 37, 4000), ('Sam', 25, 3000), ('Mark', 29, 3500),
('Bob', 41, 2500), ('Adam', 28, 2900), ('Tim', 34, 4100);
INSERT INTO employees(name, age)
VALUES ('Tom', 37), ('Nick', 25), ('Mark', 29), ('Bob', 41), ('Alice', 31);
Таблица employees содержит данные обо всех сотрудниках банка, а таблица clients - обо всех клиентах. Но сотрудники банка могут также быть его клиентами. И допустим, нам надо найти всех клиентов банка, которые не являются его сотрудниками:
SELECT name, age FROM clients EXCEPT SELECT name, age FROM employees;
Подобным образом можно получить всех сотрудников банка, которые не являются его клиентами:
SELECT name, age FROM employees EXCEPT SELECT name, age FROM clients;