# Operators

Operators combine values in expressions. Use parentheses when arithmetic, comparisons and search conditions should be grouped explicitly.

## Arithmetic and bits

| Operators               | Meaning                                    |
| ----------------------- | ------------------------------------------ |
| `+`, `-`, `*`, `/`, `%` | Numeric arithmetic, including unary signs. |
| `&`, `\|`, `~`          | Bitwise AND, OR and inversion.             |
| `<<`, `>>`              | Integer shifts.                            |
| `\|\|`                  | Text concatenation.                        |

Ordinary integer division truncates toward zero. Ordinary numeric division and remainder by zero return NULL; Decimal operations raise INVALID_ARGUMENT instead. Native exact numeric overflow raises an error.

```sql
SELECT 7 / 2, 7 % 2, 6 & 3, 'ab' || 'cd'
FORMAT csv;
```

```text
3,1,2,"abcd"
```

## Comparisons and missing values

Comparisons include `=`, `==`, `!=`, `<>`, `<`, `<=`, `>` and `>=`. Ordinary comparisons with NULL generally return NULL.

IS and IS NOT provide NULL-safe comparisons. IS NOT DISTINCT FROM is the NULL-safe equality form; IS DISTINCT FROM is its inverse. Postfix ISNULL, NOTNULL and NOT NULL test nullness.

```sql
SELECT NULL = NULL,
       NULL IS NULL,
       NULL IS NOT DISTINCT FROM NULL,
       1 IS DISTINCT FROM NULL
FORMAT csv;
```

```text
\N,1,1,1
```

## Logic and membership

AND, OR and NOT use SQL three-valued logic. BETWEEN includes both endpoints. IN tests membership in a list, subquery or table; EXISTS tests whether a subquery returns a row.

An empty right-hand side makes IN false and NOT IN true, including for a NULL left operand. Nonempty membership tests follow the documented NULL rules.

See [logical expressions](https://coordinatordb.com/docs/reference/functions/regular-functions/logical-functions) and [`IN`](https://coordinatordb.com/docs/reference/statements/in).

## Text and structured search

LIKE supports SQL wildcards and an optional ESCAPE character. GLOB uses shell-style matching. The full-text `@@` operator matches a tsvector against a tsquery.

JSON `->` returns JSON text and `->>` returns an SQL scalar. Native inet/cidr values also support documented subnet operators.

```sql
SELECT 'hello' LIKE 'he%',
       json('{"a":2}') ->> 'a'
FORMAT csv;
```

```text
1,2
```

See [string search](https://coordinatordb.com/docs/reference/functions/regular-functions/string-search-functions), [JSON functions](https://coordinatordb.com/docs/reference/functions/regular-functions/json-functions) and [network functions](https://coordinatordb.com/docs/reference/functions/regular-functions/ip-address-functions) for their specific operand contracts.
