SQL Reference

Supported SQL and data types

Every SQL statement, clause, and data type supported by mskql. For the formal grammar, see the Grammar Reference.

Supported SQL

CategorySupported
DDL CREATE TABLE (IF NOT EXISTS), DROP TABLE, CREATE INDEX (IF NOT EXISTS), DROP INDEX, CREATE TYPE … AS ENUM, DROP TYPE, CREATE SEQUENCE, DROP SEQUENCE, CREATE VIEW, DROP VIEW, ALTER TABLE (ADD/DROP/RENAME COLUMN, ALTER COLUMN TYPE)
DML INSERT (single, multi-row, INSERT…SELECT), SELECT, UPDATE (incl. UPDATE…FROM), DELETE, RETURNING, ON CONFLICT DO NOTHING, ON CONFLICT DO UPDATE, TRUNCATE TABLE, COPY TO STDOUT (tab/CSV/header), COPY FROM STDIN (tab/CSV)
Filtering WHERE with AND/OR/NOT, BETWEEN, IN (values, subqueries, multi-column), ANY/ALL, LIKE, ILIKE, IS [NOT] NULL, IS [NOT] DISTINCT FROM, = != <> < > <= >=
Joins INNER, LEFT, RIGHT, FULL OUTER, CROSS, NATURAL, USING, LATERAL, multi-table, compound ON conditions (AND/OR)
Aggregation COUNT, SUM, AVG, MIN, MAX, COUNT(DISTINCT col), STRING_AGG(), ARRAY_AGG(), expression aggregates (SUM(price * qty)), GROUP BY (multi-column, positional: GROUP BY 1, 2), GROUP BY ROLLUP, GROUP BY CUBE, HAVING
Window functions ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE(), PERCENT_RANK(), CUME_DIST(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE(), NTH_VALUE(), SUM(), COUNT(), AVG() over PARTITION BY … ORDER BY …, window frames (ROWS BETWEEN …)
Set operations UNION, UNION ALL, INTERSECT, EXCEPT
CTEs WITH name AS (SELECT …) SELECT …, WITH RECURSIVE
Expressions + - * / %, unary -, operator precedence, CASE WHEN…THEN…ELSE…END, COALESCE(), NULLIF(), GREATEST(), LEAST()
Result control DISTINCT, DISTINCT ON, ORDER BY (multi-column, per-column ASC/DESC), LIMIT, OFFSET
Constraints NOT NULL, UNIQUE, PRIMARY KEY, DEFAULT, CHECK, REFERENCES (foreign keys with ON DELETE/UPDATE CASCADE, RESTRICT, SET NULL, SET DEFAULT)
Transactions BEGIN, COMMIT, ROLLBACK (snapshot-based)
String functions UPPER(), LOWER(), LENGTH(), TRIM(), CONCAT(), CONCAT_WS(), ||, SUBSTRING(), REPLACE(), LPAD()/RPAD(), POSITION(), SPLIT_PART(), LEFT()/RIGHT(), REPEAT(), REVERSE(), INITCAP()
Math functions ABS(), CEIL()/CEILING(), FLOOR(), ROUND() (with optional decimal places), POWER(), SQRT(), MOD(), SIGN(), RANDOM()
Date/time functions NOW(), CURRENT_TIMESTAMP, CURRENT_DATE, EXTRACT(), DATE_TRUNC(), DATE_PART(), AGE(), TO_CHAR(), date/timestamp ± interval arithmetic, timestamp − timestamp → interval, date ± integer days
Type casting CAST(expr AS type), expr::type postfix syntax, numeric↔numeric, numeric↔text, text↔boolean, text→date/timestamp conversions
Table functions generate_series(start, stop [, step]) — integer, timestamp, and date sequences with optional step and column aliases
Sequences & utilities NEXTVAL(), CURRVAL(), GEN_RANDOM_UUID()
Subqueries Scalar subqueries in SELECT list, correlated subqueries, EXISTS / NOT EXISTS (correlated), IN (SELECT…)
Introspection EXPLAIN (plan-based and legacy execution paths), SHOW (server_version, search_path, client_encoding, etc.), SET/RESET/DISCARD (accepted, no-op), information_schema.tables, information_schema.columns, pg_catalog.pg_type, pg_catalog.pg_class, pg_catalog.pg_namespace, pg_catalog.pg_attribute

→ Full SQL grammar reference — production rules for every statement, with implemented/not-implemented status for each feature.

Data Types

TypeDescription
SMALLINT / INT216-bit signed integer
INT32-bit signed integer
BIGINT64-bit signed integer
FLOATDouble-precision floating point
NUMERIC / DECIMALDecimal number
TEXTVariable-length string
VARCHAR(n)Length-bounded string
BOOLEANTRUE / FALSE
DATECalendar date
TIMETime of day
TIMESTAMPDate and time
TIMESTAMPTZDate and time with time zone
INTERVALTime span
UUID128-bit universally unique identifier
SMALLSERIAL / SERIAL / BIGSERIALAuto-incrementing integer (16-bit / 32-bit / 64-bit)
ENUMUser-defined enumeration type