В этом учебном материале вы узнаете, как использовать SQL оператор EXCEPT с синтаксисом и примерами.
Описание
SQL оператор EXCEPT используется для возврата всех строк в первом операторе SELECT, которые не возвращаются вторым оператором SELECT. Каждый оператор SELECT будет определять набор данных. Оператор EXCEPT извлечет все записи из первого набора данных, а затем удалит из результатов все записи из второго набора данных.
Запрос Except
Пояснение: Запрос EXCEPT вернет записи в синей заштрихованной области. Это записи, которые существуют в наборе данных SELECT1, а не в наборе данных SELECT2.
Каждый оператор SELECT в запросе EXCEPT должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Подсказка: оператор EXCEPT поддерживается не во всех базах данных SQL. Он может использоваться в таких базах данных, как SQL Server, PostgreSQL и SQLite.
Для таких баз данных, как Oracle, используйте оператор MINUS для выполнения этого типа запроса.
Синтаксис
Синтаксис для оператора EXCEPT в SQL:
FROM tables
[WHERE conditions]
EXCEPT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
Параметры или аргументы
- expression1, expression2, expression_n
- Столбцы или расчеты, которые вы хотите получить.
- tables
- Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Это условия, которые должны быть выполнены для выбора записей.
Примечание
- В обоих операторах SELECT должно быть одинаковое количество выражений.
- Соответствующие выражения должны иметь одинаковый тип данных в SELECT предложении. Например: expression1 должен иметь одинаковый тип данных как в первом, так и во втором операторе SELECT.
Пример - с одним выражением
Давайте рассмотрим пример использования оператора EXCEPT в SQL, который возвращает одно поле с одинаковым типом данных.
Например:
1 2 3 4 5 |
SELECT product_id FROM products EXCEPT SELECT product_id FROM inventory; |
В этом примере оператора EXCEPT возвращаются все значения product_id, которые находятся в таблице products, а не в таблице inventory. Это означает, что если значение product_id существовало в таблице products, а также в таблице inventory, то product_id не будет отображаться в результатах запроса EXCEPT.
Пример - с несколькими выражениями
Далее давайте рассмотрим пример использования запроса EXCEPT в SQL, который возвращает более одного столбца.
Например:
1 2 3 4 5 6 7 |
SELECT contact_id, last_name, first_name FROM contacts WHERE last_name = 'Bieber' EXCEPT SELECT customer_id, last_name, first_name FROM customers WHERE customer_id > 45; |
В этом примере EXCEPT запрос вернет записи из таблицы contacts со значениями contact_id, last_name и first_name, которые не совпадают со значениями customer_id, last_name и first_name в таблице customers.
Пример - использование ORDER BY
Наконец, давайте посмотрим, как использовать оператор ORDER BY в запросе EXCEPT в SQL.
Например:
1 2 3 4 5 6 7 8 |
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id < 30 EXCEPT SELECT company_id, company_name FROM companies WHERE state = 'Florida' ORDER BY 2; |
В этом примере EXCEPT, поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в предложении ORDER BY по их положению в наборе результатов. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено ORDER BY 2
.
Поля supplier_name / company_name находятся на позиции № 2 в наборе результатов.