WHERE позволяет фильтровать данные, поступающие из предложения FROM оператора SELECT.
Если есть предложение WHERE, за ним должно следовать выражение типа UInt8.
Строки, для которых это выражение вычисляется в 0, исключаются из дальнейших преобразований или из результата.
Выражение после предложения WHERE часто используется с операторами сравнения и логическими операторами, а также с одной из множества обычных функций.
При вычислении выражения WHERE могут использоваться индексы и отсечение партиций, если базовый движок таблицы это поддерживает.
PREWHEREСуществует также оптимизация фильтрации под названием
PREWHERE.
PREWHERE — это оптимизация, которая позволяет применять фильтрацию более эффективно.
Она включена по умолчанию, даже если предложение PREWHERE явно не указано.Проверка значения NULL
Если нужно проверить, является ли значение NULL, используйте:
IS NULLилиisNullIS NOT NULLилиisNotNull
NULL никогда не будет истинным.
Фильтрация данных с помощью логических операторов
Следующие логические функции можно использовать вместе с предложениемWHERE, чтобы объединять несколько условий:
Использование столбцов UInt8 в качестве условия
В ClickHouse столбцыUInt8 можно напрямую использовать в качестве логических условий: 0 соответствует false, а любое ненулевое значение (обычно 1) — true.
Пример приведён в разделе ниже.
Использование операторов сравнения
Можно использовать следующие операторы сравнения:Сопоставление с шаблоном и условные выражения
Помимо операторов сравнения, в предложенииWHERE можно использовать сопоставление с шаблоном и условные выражения.
См. раздел “Сопоставление с шаблоном и условные выражения”, чтобы посмотреть примеры использования.
Выражение с литералами, столбцами или подзапросами
Выражение после предложенияWHERE также может включать литералы, столбцы или подзапросы — вложенные операторы SELECT, которые возвращают значения для использования в условиях.
Вы можете комбинировать литералы, столбцы и подзапросы в сложных условиях:
Примеры
Проверка значения NULL
Запросы со значениями NULL:
Фильтрация данных с помощью логических операторов
Рассмотрим следующую таблицу и данные:AND — оба условия должны быть истинны:
OR — хотя бы одно из условий должно выполняться:
NOT — отрицает условие:
XOR — должно быть истинным ровно одно условие (но не оба сразу):
AND, OR, NOT, XOR) обычно более удобочитаем, но синтаксис функций может быть полезен в сложных выражениях или при построении динамических запросов.
Использование столбцов UInt8 в качестве условия
Используя таблицу из предыдущего примера, можно использовать имя столбца непосредственно в качестве условия:Использование операторов сравнения
В примерах ниже используются таблица и данные из примера выше. Результаты для краткости не приводятся. 1. Явная проверка на равенство с true (= 1 или = true):
= 0 or = false):
!= 0 или != false):
IN:
В примере ниже (1, true) — кортеж.
Сопоставление с шаблоном и условные выражения
В примерах ниже используются таблица и данные из примера, приведённого выше. Результаты опущены для краткости.Примеры LIKE
Примеры ILIKE
Примеры SIMILAR TO
В отличие отLIKE, шаблон SIMILAR TO допускает также метасимволы регулярных выражений |, *, +, ?, {, }, (, ), [ и ], но, как и в случае с LIKE, он должен совпадать со всем значением целиком:
ESCAPE, которая также применима к LIKE, ILIKE, NOT LIKE, NOT ILIKE и NOT SIMILAR TO:
SIMILAR TO.