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

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

Спецификация
     
< пересечение запросов >::=
[(] составной запрос 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. В < пересечении запросов > < GROUP BY-спецификация > может использоваться только один раз. Она располагается в последнем операторе SELECT и применяется ко всему результату. Столбцы упорядочения в этом случае задаются только путем указания их порядковых номеров.

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