Оператор для наборов данных EXCEPT
Оператор EXCEPT возвращает результирующий набор для двух или более запросов, включающий в себя все записи, полученные первым запросом, которые не обнаруживаются в результатах последующих запросов. Если предложения JOIN используются для получения общих строк для двух и более запросов, предложение EXCEPT используется для отфильтровывания записей, которые присутствуют только в одной из нескольких сходных таблиц.
EXCEPT относится к классу ключевых слов, называемых операторами для наборов данных (set operator). К другим таким операторам относятся INTERSECT и UNION. (Оператор MINUS — это эквивалент EXCEPT в Oracle; стандарт ANSI использует слово EXCEPT.) Все операторы для работы с наборами используются для манипулирования с результирующими наборами сразу нескольких запросов, отсюда и «оператор для наборов».
Технически не существует ограничений на число запросов, которые можно объединить в операторе EXCEPT. Общий синтаксис следующий.
{SELECT инструкция1 | VALUES (выраж1 [, …])} EXCEPT [ALL | DISTINCT]
[CORRESPONDING [BY (столбец1, столбец2, …)]] {SELECT инструкция2 | VALUES (выраж2 [, …])}
EXCEPT [ALL | DISTINCT]
[CORRESPONDING [BY (столбец1, столбец2, …)]]
VALUES (выраж1 [, …])
Генерируется производный набор данных при помощи явно указанных значений выраж1, выраж2 и тому подобное. Это по сути результирующий набор данных инструкции SELECT без синтаксиса SELECT … FROM. Это также называется конструктором строк, поскольку строки результирующего набора конструируются вручную. Согласно стандарту ANSI несколько определенных в конструкторе вручную строк необходимо разделить запятыми и заключить в скобки.
EXCEPT
Определяется, какие строки будут исключены из одного набора данных.
ALL
Учитываются дублирующие строки во всех результирующих наборах.
DISTINCT
Дублирующиеся строки удаляются из всех результирующих наборов перед сравнением в предложении EXCEPT. Столбцы, содержащие значения NULL, считаются дублирующимися. (Если не указаны ключевые слова ALL или DISTINCT, по умолчанию используется DISTINCT.)
CORRESPONDING [BY (столбец!, столбец2, …)
Определяется, что возвращаться будут только столбцы с указанными именами, даже если в одном или нескольких запросах используется сокращение в виде звездочки.