В этом учебном пособии вы узнаете, как использовать в SQLite оператор EXCEPT с синтаксисом и примерами.
Описание
SQLite оператор EXCEPT используется для возврата всех строк в первом операторе SELECT, которые не возвращаются вторым оператором SELECT. Каждый оператор SELECT будет определять набор данных. Оператор EXCEPT извлечет все записи из первого набора данных, а затем удалит из результата все записи из второго набора данных.
Except запрос
Пояснение: Запрос EXCEPT вернет записи в синей заштрихованной области. Это записи, которые существуют в наборе данных select1, а не в наборе данных select2.
Каждый оператор SELECT в запросе EXCEPT должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.
Синтаксис
Синтаксис оператора EXCEPT в SQLite:
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 в SQLite эквивалентен оператору MINUS в Oracle.
Пример - с одним выражением
Рассмотрим пример оператора EXCEPT в SQLite, который возвращает одно поле с одинаковым типом данных.
Например:
1 2 3 4 5 |
SELECT department_id FROM departments EXCEPT SELECT department_id FROM employees; |
В этом примере оператора EXCEPT возвращаются все значения departments, которые находятся в таблице departments, а не в таблице employees. Это означает, что если значение department_id существует в таблице departments, а также в таблице employees, значение department_id не будет отображаться в результатах запроса EXCEPT.
Пример - с несколькими выражениями
Далее рассмотрим пример запроса EXCEPT в SQLite, который возвращает более одного столбца.
Например:
1 2 3 4 5 6 7 8 9 |
SELECT contact_id, last_name, first_name FROM contacts WHERE contact_id >= 74 EXCEPT SELECT employee_id, last_name, first_name FROM employees WHERE first_name = 'Sandra'; |
В этом примере EXCEPT запрос вернет записи в таблице contacts со значениями contact_id, last_name и first_name, которые не совпадают со значения employee_id, last_name и first_name в таблице employee.
Пример - использование ORDER BY
Наконец, давайте посмотрим, как использовать ORDER BY в запросе EXCEPT в SQLite.
Например:
1 2 3 4 5 6 7 8 |
SELECT supplier_id, state FROM suppliers WHERE state = 'Nevada' EXCEPT SELECT company_id, state FROM companies WHERE company_id < 2000 ORDER BY 1 DESC; |
В этом примере EXCEPT, поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в операторе ORDER BY по их позиции в результирующем наборе. В этом примере мы отсортировали результаты по supplier_id / company_id в порядке убывания, как обозначено в ORDER BY 1 DESC.
Поля supplier_id / company_id находятся в позиции №1 в результирующем наборе.