SQL REFERENCE
Expressions
Arithmetic operations, CASE expressions, CAST, and boolean logic in SQL.
Arithmetic
SELECT id, val * 2.0 AS doubled FROM t;
SELECT id, val + 10.0 AS shifted FROM t;
SELECT a, a % b AS remainder FROM modtest;
Note: Integer-float arithmetic automatically promotes to float:
SELECT i, i + r FROM types ORDER BY i;
-- (1, 2.5), (2, 4.5), (3, 6.5)
SELECT i, i * 1.5 FROM types ORDER BY i;
-- (1, 1.5), (2, 3.0), (3, 4.5)
String Concatenation
SELECT s || '!' FROM strs;
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
CASE Expressions
Searched CASE:
SELECT i, CASE
WHEN i = 1 THEN 'one'
WHEN i = 2 THEN 'two'
ELSE 'other'
END FROM t ORDER BY i;
-- (1, 'one'), (2, 'two'), (3, 'other')
Simple CASE:
SELECT i, CASE i
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END FROM t ORDER BY i;
Comparison Operators
SELECT * FROM t WHERE val > 100;
SELECT * FROM t WHERE name = 'Alice';
SELECT * FROM t WHERE id != 3;
SELECT * FROM t WHERE val >= 10.0 AND val <= 50.0;
Supported operators: =, != / <>, <, >, <=, >=.
BETWEEN
SELECT * FROM t WHERE val BETWEEN 10.0 AND 50.0;
SELECT * FROM t WHERE val NOT BETWEEN 10.0 AND 50.0;
x BETWEEN a AND b is equivalent to x >= a AND x <= b.
IN
SELECT * FROM t WHERE id IN (1, 2, 3);
SELECT * FROM t WHERE name NOT IN ('Alice', 'Bob');
LIKE / ILIKE
SELECT * FROM t WHERE name LIKE 'A%'; -- starts with 'A'
SELECT * FROM t WHERE name LIKE '%son'; -- ends with 'son'
SELECT * FROM t WHERE name LIKE '%li%'; -- contains 'li'
SELECT * FROM t WHERE name ILIKE 'alice'; -- case-insensitive match
SELECT * FROM t WHERE name NOT LIKE '%x%';
ILIKE performs case-insensitive pattern matching using a native kernel (no LOWER() overhead).
IS NULL / IS NOT NULL
SELECT * FROM t WHERE val IS NULL;
SELECT * FROM t WHERE val IS NOT NULL;
NULL is represented internally as NaN for float columns, 0 for integers, and empty string for VARCHAR.
Boolean Logic
SELECT * FROM t WHERE a > 0 AND b > 0;
SELECT * FROM t WHERE a > 0 OR b > 0;
SELECT * FROM t WHERE NOT (a > 0);
CAST
-- Numeric CAST
SELECT CAST(i AS REAL) FROM types WHERE i = 1; -- 1.0
SELECT i::REAL FROM types WHERE i = 1; -- 1.0
SELECT CAST(r AS INTEGER) FROM types; -- truncates to int
-- Temporal CAST (string literals parsed at plan time)
SELECT CAST('2025-01-15' AS DATE);
SELECT CAST('12:30:00' AS TIME);
SELECT CAST('2025-01-15 09:30:00' AS TIMESTAMP);
The :: shorthand is equivalent to CAST(... AS ...). TRY_CAST is not supported.
COALESCE and NULLIF
SELECT COALESCE(val, 0) FROM t;
SELECT NULLIF(val, 50.0) FROM t;
LEAST and GREATEST
SELECT LEAST(a, b, c) FROM t;
SELECT GREATEST(val, 0.0) FROM t;
Return the minimum or maximum value from a list of expressions (requires at least 2 arguments).
Constant Expressions (SELECT without FROM)
SELECT 1 + 2; -- 3
SELECT 'foo' || 'bar'; -- foobar
SELECT 3.14; -- 3.14
SELECT true; -- true
Constant expressions can be evaluated without a FROM clause. A single-row dummy table is synthesized internally.