В этом учебном пособии вы узнаете, как использовать в PostgreSQL оператор EXCEPT, с синтаксисом и примерами.
Описание
Оператор PostgreSQL EXCEPT используется для возврата всех строк в первом операторе SELECT, которые не возвращаются вторым оператором SELECT. Каждый оператор SELECT будет определять набор данных. Оператор EXCEPT извлечет все записи из первого набора данных, а затем удалит из результатов все записи из второго набора данных.
EXCEPT запрос
Объяснение: Запрос «EXCEPT» вернет записи в заштрихованной области синего цвета. Это записи, которые существуют в наборе данных SELECT 1, а не в наборе данных SELECT 2.
Каждый оператор SELECT в запросе «EXCEPT» должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Синтаксис
Синтаксис для оператора EXCEPT в PostgreSQL:
FROM tables
[WHERE conditions]
EXCEPT
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
Параметры или аргументы
- expressions
- Столбцы или вычисления, которые вы хотите сравнить между двумя операторами SELECT. Они не обязательно должны быть одинаковыми полями в каждом из операторов SELECT, но соответствующие столбцы должны быть схожими типами данных.
- tables
- Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.
Примечание
- В обоих операторах SELECT должно быть одинаковое количество выражений.
- Соответствующие столбцы в каждом из операторов SELECT должны иметь похожие типы данных.
- Оператор EXCEPT возвращает все записи из первого оператора SELECT, которых нет во втором операторе SELECT.
- Оператор EXCEPT в PostgreSQL эквивалентен оператору MINUS в Oracle.
Пример - с одним выражением
Рассмотрим пример оператора EXCEPT в PostgreSQL, который возвращает одно поле с одинаковым типом данных.
Например:
1 2 3 4 5 |
SELECT category_id FROM products EXCEPT SELECT category_id FROM inventory; |
В этом примере оператора EXCEPT возвращаются все значения category_id, которые находятся в таблице products, а не в таблице inventory. Это означает, что если значение category_id существовало в таблице products, а также в таблице inventory, то category_id значение не будет отображаться в результатах запроса EXCEPT.
Пример - с несколькими выражениями
Далее Рассмотрим пример запроса EXCEPT в PostgreSQL, который возвращает более одного столбца.
Например:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT contact_id, last_name, first_name FROM contacts WHERE last_name = 'Ivanov' EXCEPT SELECT customer_id, last_name, first_name FROM customers WHERE customer_id < 99; |
В этом примере EXCEPT запрос вернет записи из таблице contacts с contact_id, last_name и first_name значение, которое не совпадает со значением customer_id, last_name и first_name в таблице customers.
Пример - использование ORDER BY
Наконец, давайте посмотрим, как использовать оператор ORDER BY в запросе EXCEPT в PostgreSQL.
Например:
1 2 3 4 5 6 7 8 9 10 |
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id >= 59 EXCEPT SELECT company_id, company_name FROM companies WHERE state = 'Nevada' ORDER BY 2; |
В этом примере EXCEPT, поскольку имена столбцов в двух SELECT операторах различаются, более выгодно ссылаться на столбцы в операторе ORDER BY по их положению в результирующем наборе. В этом примере мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как обозначено ORDER BY 2
.
Поля supplier_name / company_name находятся на позиции № 2 в результирующем наборе.