# Expressions

An expression is a combination of values, operators and functions. Expressions are highly composable, and range from very simple to arbitrarily complex. They can be found in many different parts of SQL statements. In this section, we provide the different types of operators that can be used within expressions.

## Logical Operators

Logical Operators are used within Expressions to express how predicates combine.

The following logical operators are available: `AND`

, `OR`

, `XOR`

, and `NOT`

.

a | b | a `AND` b |
a `OR` b |
a `XOR` b |
`NOT` a |
---|---|---|---|---|---|

true | true | true | true | false | false |

true | false | false | true | true | false |

false | false | false | false | false | true |

null |
true | null |
null |
null |
null |

null |
false | null |
null |
null |
null |

The operators `AND`

, `OR`

, and `XOR`

are commutative, that is, you can switch the left and right operand without affecting the result.

## Comparison Operators

Comparison Operators are used within Expressions to compare values, usually involving comparing a field within the datasets against a literal value - although comparisons can be used against two fields, or two literals.

Usually when one of the values involved in the comparison is `null`

, the result is `null`

.

Operator | Description |
---|---|

`=` |
equal to |

`<>` |
not equal to |

`<` |
less than |

`>` |
greater than |

`<=` |
less than or equal to |

`>=` |
greater than or equal to |

`IN` |
value in list |

`NOT IN` |
value not in list |

`LIKE` |
pattern match |

`NOT LIKE` |
inverse results of `LIKE` |

`ILIKE` |
case-insensitive pattern match |

`NOT ILIKE` |
inverse results of `ILIKE` |

`RLIKE` |
regular expression match (also `~` and `SIMILAR TO` ) |

`NOT RLIKE` |
inverse results of `RLIKE` (also `!~` and `NOT SIMILAR TO` ) |

`~*` |
case insensitive regular expression match |

`!~*` |
inverse results of `~*` |

`IS` |
special comparison for `true` , `false` and `null` |

`|` |
Bitwise OR, or IP containment |

`&` |
Bitwise AND |

`^` |
Bitwise XOR |

## Other Comparisons

### BETWEEN

Predicate | Description |
---|---|

a `BETWEEN` x `AND` y |
equivalent to `a >= x AND a <= y` |

a `NOT BETWEEN` x `AND` y |
equivalent to `a < x OR a > y` |

Warning

Using `BETWEEN`

with other predicates, especially when used with an `AND`

conjunction, can cause the query parser to fail.

### CASE

The `CASE`

expression has two forms. The 'simple' form searches each value expression from top to bottom until it finds one that equals expression:

The result for the matching value is returned. If no match is found, the result from the `ELSE`

clause is returned if it exists, otherwise `null`

is returned. Example:

```
SELECT name,
CASE numberOfMoons
WHEN 0 THEN 'none'
WHEN 1 THEN 'one'
ELSE 'lots'
END as how_many_moons
FROM $planets;
```

The 'searched' form evaluates each boolean condition from top to bottom until one is true and returns the matching result:

If no conditions are true, the result from the `ELSE`

clause is returned if it exists, otherwise `null`

is returned. Example: