В этом руководстве вы узнаете, как использовать оператор EXCEPT SQL Server для вычитания набора результатов запроса из другого набора результатов другого запроса.
Введение в оператор EXCEPT SQL Server
SQL Server EXCEPT сравнивает наборы результатов двух запросов и возвращает отдельные строки из первого запроса, которые не выводятся вторым запросом. Другими словами, EXCEPT вычитает набор результатов одного запроса из другого.
Ниже показан синтаксис SQL Server EXCEPT:
query_1 EXCEPT query_2
Ниже приведены правила объединения наборов результатов двух запросов в приведенном выше синтаксисе:
- Количество и порядок столбцов должны быть одинаковыми в обоих запросах.
- Типы данных соответствующих столбцов должны быть одинаковыми или совместимыми.
На следующем рисунке показана операция EXCEPT для двух наборов результатов T1 и T2:
На этой иллюстрации:
- Набор результатов T1 включает 1, 2 и 3.
- Набор результатов T2 включает 2, 3 и 4.
За исключением T1 и T2 возвращается 1, что является отдельной строкой из набора результатов T1, которая не отображается в наборе результатов T2.
Пример оператора EXCEPT SQL Server
См. следующие таблицы products и order_items из образца базы данных :
A) Простой пример EXCEPT
В следующем примере оператор EXCEPT используется для поиска продуктов, по которым нет продаж:
SELECT product_id FROM production.products EXCEPT SELECT product_id FROM sales.order_items;
В этом примере первый запрос возвращает все продукты. Второй запрос возвращает продукты, которые продаются. Таким образом, в набор результатов входят только продукты, которые не продаются.
B) ЗА ИСКЛЮЧЕНИЕМ примера ORDER BY
Чтобы отсортировать набор результатов, созданный оператором EXCEPT, вы добавляете предложение ORDER BY в последний запрос. Например, следующий пример находит продукты, у которых не было продаж, и сортирует продукты по их идентификатору в порядке возрастания:
SELECT product_id FROM production.products EXCEPT SELECT product_id FROM sales.order_items ORDER BY product_id;
В этом руководстве вы узнали, как использовать SQL Server EXCEPT для объединения наборов результатов двух запросов.