Оператор EXCEPT
Оператор 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
, чтобы удалить дублирующиеся строки из результата:
Результат:
Смотрите также