EXCEPT Clause
Клауза EXCEPT
возвращает только те строки, которые получаются из первого запроса без второго.
- Оба запроса должны содержать одинаковое количество колонок в одинаковом порядке и с одинаковым типом данных.
- Результат
EXCEPT
может содержать дубликатные строки. ИспользуйтеEXCEPT DISTINCT
, если это нежелательно. - Несколько операторов
EXCEPT
выполняются слева направо, если скобки не указаны. - Оператор
EXCEPT
имеет такой же приоритет, как и клаузуUNION
, и более низкий, чем у клаузиINTERSECT
.
Синтаксис
Условие может быть любым выражением в зависимости от ваших требований.
Дополнительно, EXCEPT()
может использоваться для исключения колонок из результата в той же таблице, как это возможно в BigQuery (Google Cloud), с использованием следующего синтаксиса:
Примеры
Примеры в этом разделе демонстрируют использование клаузы EXCEPT
.
Фильтрация чисел с помощью клаузы EXCEPT
Вот простой пример, который возвращает числа от 1 до 10, которые не являются частью чисел от 3 до 8:
Запрос:
Результат:
Исключение определенных колонок с помощью EXCEPT()
EXCEPT()
может использоваться для быстрого исключения колонок из результата. Например, если мы хотим выбрать все колонки из таблицы, кроме нескольких выбранных колонок, как показано в следующем примере:
Запрос:
Результат:
Использование EXCEPT
и INTERSECT
с данными о криптовалюте
EXCEPT
и INTERSECT
часто можно использовать взаимозаменяемо с различной логикой, и оба они полезны, если у вас есть две таблицы, которые разделяют общие колонки (или колонки).
Например, предположим, что у нас есть несколько миллионов строк исторических данных о криптовалюте, содержащие цены сделок и объемы:
Запрос:
Результат:
Теперь предположим, что у нас есть таблица под названием holdings
, которая содержит список криптовалют, которые мы держим, вместе с количеством монет:
Мы можем использовать EXCEPT
, чтобы ответить на вопрос "Какие монеты мы владеем и которые никогда не торговались ниже $10?":
Результат:
Это означает, что из четырех криптовалют, которыми мы владеем, только Bitcoin никогда не снижался ниже $10 (основываясь на ограниченных данных, которые у нас здесь в этом примере).
Использование EXCEPT DISTINCT
Обратите внимание, что в предыдущем запросе у нас было несколько держаний Bitcoin в результате. Вы можете добавить DISTINCT
к EXCEPT
, чтобы удалить дубликатные строки из результата:
Результат:
См. также