Пересечение запросов
Функция

Определение пересекающихся результатов двух запросов.

Спецификация
     
<пересечение запросов>::=
[(] составной запрос INTERSECT [ALL | DISTINCT]
[CORRESPONDING [BY (имя столбца [, …]) ] ] составной запрос [)]
Синтаксические правила
  1. Все <составные запросы> одного <пересечения запросов> должны иметь одинаковое количество совместимых по типу данных столбцов (различными могут быть только имена столбцов).

  2. Описание конструкции CORRESPONDING приведено в пункте «Объединение запросов».

Общие правила
  1. <Пересечение запросов> получается следующим образом:

    • результат инициализируется пустой таблицей;

    • в результат вставляются все строки, которые есть и в первом <составном запросе>, и во втором <составном запросе>.

  2. Если указан DISTINCT, из результата исключаются дубликаты строк.

  3. Если указан ALL, каждая запись выдается в наименьшем количестве, в котором она содержится в одном из <составных запросов>.

    Пусть есть две таблицы:

    tab1   tab2
       1      2
       2      4
       3      5
       4      7
       3      4
       4
    select * from tab1 intersect all select * from tab2; select * from tab1 intersect distinct select * from tab2;
    |2 |
    |4 |
    |4 |
    |2 |
    |4 |
    
  4. В <пересечении запросов> может использоваться только один раз. Она располагается в последнем операторе SELECT и применяется ко всему результату. Столбцы упорядочения в этом случае задаются только путем указания их порядковых номеров.

  5. I-й столбец результата <пересечения запросов> будет именован только в том случае, если среди исходных i-х столбцов есть хотя-бы один именованный столбец. В качестве имени результирующего столбца будет взято имя первого именованного столбца из операндов комбинированного запроса.