# Operators¶

All operators are transformed to the corresponding functions at the query parsing stage, in accordance with their precedence and associativity.

## Access operators¶

`a[N]` - Access to an array element, arrayElement(a, N) function.

`a.N` - Access to a tuple element, tupleElement(a, N) function.

## Numeric negation operator¶

`-a` - negate(a) function

## Multiplication and division operators¶

`a * b` - multiply(a, b) function

`a / b` - divide(a, b) function

`a % b` - modulo(a, b) function

## Addition and subtraction operators¶

`a + b` - plus(a, b) function

`a - b` - minus(a, b) function

## Comparison operators¶

`a = b` - equals(a, b) function

`a == b` - equals(a, b) function

`a != b` - notEquals(a, b) function

`a <> b` - notEquals(a, b) function

`a <= b` - lessOrEquals(a, b) function

`a >= b` - greaterOrEquals(a, b) function

`a < b` - less(a, b) function

`a > b` - greater(a, b) function

`a LIKE s` - like(a, b) function

`a NOT LIKE s` - notLike(a, b) function

`a BETWEEN b AND c` - equivalent to a >= b AND a <= c

## Operators for working with data sets¶

See the section “IN operators”.

`a IN ...` - in(a, b) function

`a NOT IN ...` - notIn(a, b) function

`a GLOBAL IN ...` - globalIn(a, b) function

`a GLOBAL NOT IN ...` - globalNotIn(a, b) function

## Logical negation operator¶

`NOT a` - `not(a)` function

## Logical “AND” operator¶

`a AND b` - function `and(a, b)`

## Logical “OR” operator¶

`a OR b` - function `or(a, b)`

## Conditional operator¶

`a ? b : c` - function `if(a, b, c)`

## Conditional expression¶

```CASE [x]
WHEN a THEN b
[WHEN ... THEN ...]
ELSE c
END
```

If x is given - transform(x, [a, ...], [b, ...], c). Otherwise, multiIf(a, b, ..., c).

## String concatenation operator¶

`s1 || s2` - concat(s1, s2) function

## Lambda creation operator¶

`x -> expr` - lambda(x, expr) function

The following operators do not have a priority, since they are brackets:

## Array creation operator¶

`[x1, ...]` - array(x1, ...) function

## Tuple creation operator¶

`(x1, x2, ...)` - tuple(x2, x2, ...) function

## Associativity¶

All binary operators have left associativity. For example, `'1 + 2 + 3'` is transformed to `'plus(plus(1, 2), 3)'`. Sometimes this doesn’t work the way you expect. For example, `'SELECT 4 > 3 > 2'` results in `0`.

For efficiency, the ‘and’ and ‘or’ functions accept any number of arguments. The corresponding chains of AND and OR operators are transformed to a single call of these functions.