В этом учебном материале вы узнаете, как использовать SQL оператор INTERSECT с синтаксисом и примерами.
Описание
SQL оператор INTERSECT используется для возврата результатов 2 или более операторов SELECT. Однако он возвращает только строки, выбранные всеми запросами или наборами данных. Если запись существует в одном запросе, а не в другом, она будет опущена в результатах INTERSECT.
INTERSECT запрос
Объяснение: Запрос INTERSECT вернет записи в синей заштрихованной области. Это записи, которые существуют как в SELECT1, так и в SELECT2.
Каждый оператор в SQL INTERSECT должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Синтаксис
Синтаксис оператора INTERSECT в SQL:
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.
Пример - с одним выражением
Ниже приведен пример SQL оператора INTERSECT, в котором есть одно поле с одинаковым типом данных:
1 2 3 4 5 |
SELECT supplier_id FROM suppliers INTERSECT SELECT supplier_id FROM orders; |
В этом SQL примере INTERSECT, если поле supplier_id находится в таблицах suppliers и orders, оно появится в вашем наборе результатов.
Теперь давайте усложним наш пример, добавив WHERE условия к запросу INTERSECT.
1 2 3 4 5 6 7 |
SELECT supplier_id FROM suppliers WHERE supplier_id > 78 INTERSECT SELECT supplier_id FROM orders WHERE quantity <> 0; |
В этом примере оператор WHERE были добавлен к каждому из наборов данных. Первый набор данных был отфильтрован так, что возвращаются только записи из таблицы suppliers, где supplier_id больше 78. Второй набор данных был отфильтрован так, что возвращаются только записи из таблицы orders, где quantity не равен 0.
Пример - с несколькими выражениями
Далее давайте рассмотрим пример использования SQL оператора INTERSECT для возврата более одного столбца.
Например:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT contact_id, last_name, first_name FROM contacts WHERE last_name <> 'Marlos' INTERSECT SELECT customer_id, last_name, first_name FROM customers WHERE customer_id < 50; |
В этом примере, INTERSECT запрос вернет записи из таблицы contacts, где значения contact_id, last_name и first_name соответствуют значениям customer_id, last_name и first_name из таблицы customers.
В операторе WHERE для каждого набора данных указаны условия для фильтрации результатов, возвращаются только те записи из таблицы contacts, где last_name не является 'Marlos'.Также записи из таблицы customers, где customer_id меньше 50.
Пример - использование ORDER BY
Ниже приведен пример INTERSECT, в котором используется предложение ORDER BY:
1 2 3 4 5 6 7 8 |
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id > 2000 INTERSECT SELECT company_id, company_name FROM companies WHERE company_id > 1000 ORDER BY 2; |
Поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в предложении ORDER BY по их положению в наборе результатов. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено в ORDER BY 2.
Поля supplier_name / company_name находятся в позиции № 2 в наборе результатов.