INTERSECT оператор SQLite

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

Описание

SQLite оператор INTERSECT возвращает пересечение 2 или более наборов данных. Каждый набор данных определяется оператором SELECT. Если запись существует в обоих наборах данных, она будет включена в результаты INTERSECT. Однако, если запись существует в одном наборе данных, а не в другом, она будет опущена в результатах INTERSECT.

INTERSECT запрос

Пояснение: Запрос INTERSECT вернет записи в синей заштрихованной области. Это записи, которые существуют как в select1, так и в select2.

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

Синтаксис

Синтаксис оператора INTERSECT в SQLite:

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

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

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

tables
Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.

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

Примечание

  • В обоих операторах SELECT должно быть одинаковое количество выражений.
  • Соответствующие выражения должны иметь одинаковый тип данных в операторах SELECT. Например: expression1 должно иметь одинаковый тип данных как в первом, так и во втором операторе SELECT.

Пример - с одним выражением

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

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

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

В этом примере предложения WHERE были добавлены к каждому из наборов данных. Первый набор данных был отфильтрован таким образом, что возвращаются только те записи из таблицы departments, где department_id больше или равно 25. Второй набор данных был отфильтрован так, что возвращаются только те записи из таблицы employees, где last_name не равно 'Petrov'.

Пример - с несколькими выражениями

Далее давайте рассмотрим пример использования оператора INTERSECT в SQLite для возврата более одного столбца.

Например:

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

Существуют WHERE условия для каждого набора данных для дальнейшей фильтрации результатов, так что возвращаются только те записи из contacts, где contact_id больше 50. Записи из таблицы customers возвращаются, когда last_name не равно 'Zagoskin'.

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

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

Поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в операторе ORDER BY по их позициям в результирующем наборе. В этом примере мы отсортировали результаты по department_id / company_id в порядке возрастания, как обозначено в ORDER BY 1.

Поля department_id / company_id находятся в позиции № 1 в результирующем наборе.