Оператор 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;