INTERSECT ОПЕРАТОР

В этом учебном материале вы узнаете, как использовать Oracle оператор INTERSECT с синтаксисом и примерами.

Описание

Oracle оператор INTERSECT используется для возврата результатов 2-х или более запросов SELECT. Тем не менее, он возвращает строки, выбранные для всех запросов или наборов данных. Если запись существует в одном запросе, а в другом нет, то она будет исключена из результирующего набора INTERSECT.

intersect

Пояснение: Запрос INTERSECT будет возвращать записи в серой затененной области. Эти записи, которые существуют в обоих SELECT 1 и SELECT 2.

Каждый оператор SELECT в INTERSECT должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.

Синтаксис

Синтаксис оператора INTERSECT в Oracle/PLSQL:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
INTERSECT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

Параметры или аргументы

expression1, expression2, ... expression_n

Столбцы или расчеты, которые вы хотите получить.

tables

Таблицы из которых вы хотите получить записи.

WHERE conditions

Необязательный. Условия, которые должны быть выполнены для выбранных записей.

Примечание

В обоих SELECT запросах должно быть одинаковое количество expression и иметь схожие типы данных.

Пример с одним полем

Ниже приведен пример Oracle оператора INTERSECT, который возвращает одно поле с тем же типом данных:

В этом примере INTERSECT, если поле supplier_id находится в таблицах suppliers и orders, то оно будет отображаться в вашем результирующем наборе.

Теперь, давайте усложним наш пример. Далее, добавляя условия WHERE для запроса INTERSECT.

В этом примере к каждому из наборов данных было добавлено условие WHERE. Первый набор данных был отфильтрован, так, что из таблицы suppliers в результирующий набор попали только те записи, где supplier_id меньше или равна 99. Второй набор данных отфильтрован так, что из таблицы orders возвращаются только те записи, где количество больше 25.

Пример с несколькими полями

Далее рассмотрим пример того, как использовать в Oracle оператор INTERSECT с более одним полем.

Например:

В этом примере INTERSECT запрос будет возвращать записи из таблицы contacts, в которых значения полей contact_id, last_name и first_name будут соответствовать значениям customer_id, last_name и first_name из таблицы customers.

Имеются условия WHERE для каждого набора данных для дальнейшей фильтрации результатов так, что из таблицы contacts возвращаются только записи, где first_name не John. Из таблицы customers возвращаются записи, где customer_id больше или равен 89.

Пример использования ORDER BY

Ниже приведен пример INTERSECT, который использует ORDER BY:

Так как имена полей в двух запросах SELECT отличаются, то в операторе ORDER BY выгоднее ссылаться на положение столбцов в результирующем наборе. В этом примере, мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как это обозначено в ORDER BY 2.

Поля supplier_name / company_name находятся в позиции # 2 в результирующем наборе.