* Doc fixes: rm anchors <a> * Doc fixes: rm anchors <a> * Doc fixes: fix links * Doc fixes: fix the links
5.9 KiB
Операторы
Все операторы преобразуются в соответствующие функции на этапе парсинга запроса, с учётом их приоритетов и ассоциативности. Далее будут перечислены группы операторов в порядке их приоритета (чем выше, тем раньше оператор связывается со своими аргументами).
Операторы доступа
a[N] - доступ к элементу массива, функция arrayElement(a, N).
a.N - доступ к элементу кортежа, функция tupleElement(a, N).
Оператор числового отрицания
-a - функция negate(a).
Операторы умножения и деления
a * b - функция multiply(a, b)
a / b - функция divide(a, b)
a % b - функция modulo(a, b)
Операторы сложения и вычитания
a + b - функция plus(a, b)
a - b - функция minus(a, b)
Операторы сравнения
a = b - функция equals(a, b)
a == b - функция equals(a, b)
a != b - функция notEquals(a, b)
a <> b - функция notEquals(a, b)
a <= b - функция lessOrEquals(a, b)
a >= b - функция greaterOrEquals(a, b)
a < b - функция less(a, b)
a > b - функция greater(a, b)
a LIKE s - функция like(a, b)
a NOT LIKE s - функция notLike(a, b)
a BETWEEN b AND c - равнозначно a >= b AND a <= c
Операторы для работы с множествами
Смотрите раздел Операторы IN.
a IN ... - функция in(a, b)
a NOT IN ... - функция notIn(a, b)
a GLOBAL IN ... - функция globalIn(a, b)
a GLOBAL NOT IN ... - функция globalNotIn(a, b)
Оператор логического отрицания
NOT a - функция not(a)
Оператор логического 'И'
a AND b - функция and(a, b)
Оператор логического 'ИЛИ'
a OR b - функция or(a, b)
Условный оператор
a ? b : c - функция if(a, b, c)
Примечание:
Условный оператор сначала вычисляет значения b и c, затем проверяет выполнение условия a, и только после этого возвращает соответствующее значение. Если в качестве b или с выступает функция arrayJoin(), то размножение каждой строки произойдет вне зависимости от условия а.
Условное выражение
CASE [x]
WHEN a THEN b
[WHEN ... THEN ...]
[ELSE c]
END
В случае указания x - функция transform(x, [a, ...], [b, ...], c). Иначе — multiIf(a, b, ..., c).
При отсутствии секции ELSE c, значением по умолчанию будет NULL.
P.S. Функция transform не умеет работать с NULL.
Оператор склеивания строк
s1 || s2 - функция concat(s1, s2)
Оператор создания лямбда-выражения
x -> expr - функция lambda(x, expr)
Следующие операторы не имеют приоритета, так как представляют собой скобки:
Оператор создания массива
[x1, ...] - функция array(x1, ...)
Оператор создания кортежа
(x1, x2, ...) - функция tuple(x2, x2, ...)
Ассоциативность
Все бинарные операторы имеют левую ассоциативность. Например, 1 + 2 + 3 преобразуется в plus(plus(1, 2), 3).
Иногда это работает не так, как ожидается. Например, SELECT 4 > 3 > 2 выдаст 0.
Для эффективности, реализованы функции and и or, принимающие произвольное количество аргументов. Соответствующие цепочки операторов AND и OR, преобразуются в один вызов этих функций.
Проверка на NULL
ClickHouse поддерживает операторы IS NULL и IS NOT NULL.
IS NULL
- Для значений типа Nullable оператор
IS NULLвозвращает:1, если значение —NULL.0в обратном случае.
- Для прочих значений оператор
IS NULLвсегда возвращает0.
:) SELECT x+100 FROM t_null WHERE y IS NULL
SELECT x + 100
FROM t_null
WHERE isNull(y)
┌─plus(x, 100)─┐
│ 101 │
└──────────────┘
1 rows in set. Elapsed: 0.002 sec.
IS NOT NULL
- Для значений типа Nullable оператор
IS NOT NULLвозвращает:0, если значение —NULL.1, в обратном случае.
- Для прочих значений оператор
IS NOT NULLвсегда возвращает1.
:) SELECT * FROM t_null WHERE y IS NOT NULL
SELECT *
FROM t_null
WHERE isNotNull(y)
┌─x─┬─y─┐
│ 2 │ 3 │
└───┴───┘
1 rows in set. Elapsed: 0.002 sec.