В этом учебном пособии вы узнаете, как использовать оператор INTERSECT в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
Оператор INTERSECT SQL Server (Transact-SQL) используется для возврата записей, которые являются общими между двумя операторами SELECT или наборами данных. Если запись существует в одном запросе, а не в другом, она будет исключена из результатов INTERSECT. Это пересечение двух операторов SELECT.
Запрос Intersect
Пояснение: Запрос INTERSECT вернет записи в серой затененной области. Это записи, которые существуют как в SELECT 1, так и в SELECT 2.
Каждый оператор SELECT в SQL Server INTERSECT должен иметь одинаковое количество столбцов в наборах результатов с похожими типами данных.
Синтаксис
Синтаксис оператора NTERSECT в SQL Server (Transact-SQL):
FROM tables
[WHERE conditions]
INTERSECT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
Параметры или аргументы
expressions - столбцы или вычисления, которые вы хотите сравнить между двумя операторами SELECT. Они не должны быть одинаковыми полями в каждом из операторов SELECT, но соответствующие столбцы должны быть с похожими типами данных.
tables - таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в предложении FROM.
WHERE conditions - необязательный. Условия, которые должны быть выполнены для выбранных записей.
Примечание
- В обоих операторах SELECT должно быть одинаковое количество выражений.
- Соответствующие столбцы в каждом из операторов SELECT должны иметь похожие типы данных.
- Оператор INTERSECT возвращает только общие записи между операторами SELECT.
Пример с одним expressions
Рассмотрим пример запроса INTERSECT в SQL Server (Transact-SQL), который возвращает один столбец с тем же типом данных.
Например:
1 2 3 4 5 |
SELECT product_id FROM products INTERSECT SELECT product_id FROM inventory; |
В этом примере INTERSECT, если product_id появился как в таблице products, так и в таблице inventory, он появится в вашем результирующем наборе для этого запроса INTERSECT.
Теперь давайте усложним наш пример, добавив условия WHERE к запросу INTERSECT.
1 2 3 4 5 6 7 |
SELECT product_id FROM products WHERE product_id >= 30 INTERSECT SELECT product_id FROM inventory WHERE quantity > 10; |
В этом примере к каждому набору данных добавлены предложения WHERE. Первый набор данных был отфильтрован таким образом, что возвращаются только записи из таблицы products, где product_id больше или равно 30. Второй набор данных был отфильтрован таким образом, чтобы возвращались только записи из таблицы inventory, где quantity больше 10.
Пример с несколькими выражениями
Затем давайте рассмотрим пример запроса INTERSECT в SQL Server (Transact-SQL), который возвращает более одного столбца.
Например:
1 2 3 4 5 6 |
SELECT contact_id, last_name, first_name FROM contacts WHERE last_name = 'Anderson' INTERSECT SELECT employee_id, last_name, first_name FROM employees; |
В этом примере INTERSECT запрос вернет пересечение двух операторов SELECT. Поэтому, если в таблице contacts есть записи с именем contact_id, last_name и first_name, которое соответствует значению employee_id, last_name и first_name в таблице employee, запрос INTERSECT вернет эти записи. Если совпадений нет, то INTERSECT не вернет записи.
Пример использования ORDER BY
Наконец, давайте рассмотрим, как использовать предложение ORDER BY в запросе INTERSECT в SQL Server (Transact-SQL).
Например:
1 2 3 4 5 6 7 8 |
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id > 500 INTERSECT SELECT company_id, company_name FROM companies WHERE company_name in ( 'Apple', 'Microsoft', 'SQL Server' ) ORDER BY 2; |
Поскольку имена столбцов различаются между двумя операторами SELECT, более выгодно ссылаться на столбцы в предложении ORDER BY по их позиции в наборе результатов. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено ORDER BY 2.
В поле supplier_name / company_name находятся позиции № 2 в результирующем наборе.