Available in versions: Dev (3.20) | Latest (3.19) | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11 | 3.10

SQL Parser Grammar

Applies to ✅ Open Source Edition   ✅ Express Edition   ✅ Professional Edition   ✅ Enterprise Edition

The existing implementation of the SQL parser is a hand-written, recursive descent parser. There are great advantages of this approach over formal grammar-based, generated parsers (e.g. by using ANTLR). These advantages are, among others:

  • They can be tuned easily for performance
  • They are very simple and easy to maintain
  • It's easy to implement corner cases of the grammar, which might require context (that's a big plus with SQL)
  • It's the easiest way to bind a grammar to an existing backing expression tree implementation (which is what jOOQ really is)

Nevertheless, there is a grammar available for documentation purposes and it is included in the manual here:

batch ::=

; query

query ::=

ddlStatement dmlStatement blockStatement

ddlStatement ::=

alterDatabaseStatement alterDomainStatement alterIndexStatement alterSchemaStatement alterSequenceStatement alterSessionStatement alterTableStatement alterTypeStatement alterViewStatement commentStatement createDatabaseStatement createDomainStatement createFunctionStatement createIndexStatement createProcedureStatement createSchemaStatement createSequenceStatement createTableStatement createTriggerStatement createTypeStatement createViewStatement dropDatabaseStatement dropDomainStatement dropFunctionStatement dropIndexStatement dropProcedureStatement dropTableStatement dropTypeStatement dropSchemaStatement dropSequenceStatement dropTriggerStatement dropViewStatement grantStatement renameStatement revokeStatement setCatalogStatement setSchemaStatement truncateStatement useStatement

dmlStatement ::=

deleteStatement insertStatement mergeStatement resultStatement updateStatement

proceduralStatements ::=

proceduralStatement ;

proceduralStatement ::=

label query assignmentStatement callStatement caseStatement labelName continueStatement declareStatement executeStatement exitStatement forStatement labelName gotoStatement ifStatement labelName loopStatement labelName nullStatement repeatStatement labelName returnStatement signalStatement whileStatement labelName

label ::=

<< labelName >> labelName :

blockStatement ::=

EXECUTE BLOCK AS DECLARE declarationStatement ; BEGIN NOT ATOMIC proceduralStatements END DO stringLiteral

declarationStatement ::=

variableName CONSTANT dataType NOT NULL = := DEFAULT field

declareStatement ::=

DECLARE DEFINE , variableNames AS dataType = DEFAULT field

assignmentStatement ::=

SET LET variableName = field SET ( variableNames ) = fields select variableName := field

ifStatement ::=

IF condition ifSimpleBody ifBlockBody

ifSimpleBody ::=

proceduralStatement ELSE proceduralStatement

ifBlockBody ::=

THEN proceduralStatements ELSIF ELSEIF condition THEN proceduralStatement ELSE proceduralStatements END IF

caseStatement ::=

CASE field WHEN field THEN proceduralStatements WHEN condition THEN proceduralStatements ELSE proceduralStatements END CASE

loopStatement ::=

LOOP proceduralStatements END LOOP

forStatement ::=

FOR variableName IN REVERSE int .. int BY int loopStatement

whileStatement ::=

WHILE condition loopStatement DO proceduralStatements END WHILE

repeatStatement ::=

REPEAT proceduralStatements UNTIL condition END REPEAT

executeStatement ::=

EXECUTE IMMEDIATE STATEMENT field ( field )

callStatement ::=

CALL procedureName ( arguments ) EXECUTE PROCEDURE procedureName ( arguments ) arguments procedureName ( arguments ) EXEC procedureName arguments

arguments ::=

, argument

argument ::=

parameterName

gotoStatement ::=

GOTO labelName

continueStatement ::=

CONTINUE ITERATE labelName WHEN condition

exitStatement ::=

EXIT LEAVE label WHEN condition

returnStatement ::=

RETURN field

signalStatement ::=

SIGNAL SQLSTATE VALUE stringLiteral SET MESSAGE_TEXT = stringLiteral ( stringLiteral ) RAISE EXCEPTION SQLSTATE stringLiteral USING MESSAGE = stringLiteral

nullStatement ::=

NULL

alterDatabaseStatement ::=

ALTER DATABASE IF EXISTS catalogName RENAME TO AS catalogName OWNER TO userName

alterDomainStatement ::=

ALTER DOMAIN IF EXISTS domainName ADD constraint CONSTRAINT constraintName constraint DROP CONSTRAINT IF EXISTS constraintName CASCADE RESTRICT RENAME TO AS domainName RENAME CONSTRAINT IF EXISTS constraintName TO AS constraintName SET DEFAULT concat DROP DEFAULT SET DROP NOT NULL OWNER TO userName

alterIndexStatement ::=

ALTER INDEX IF EXISTS indexName RENAME TO AS indexName

alterSchemaStatement ::=

ALTER SCHEMA IF EXISTS schemaName RENAME TO AS schemaName OWNER TO userName

alterSequenceStatement ::=

ALTER SEQUENCE IF EXISTS sequenceName RENAME TO AS sequenceName OWNER TO userName RESTART WITH uint START WITH = int INCREMENT BY = int MINVALUE = int NO MINVALUE NOMINVALUE MAXVALUE = int NO MAXVALUE NOMAXVALUE CYCLE NO CYCLE NOCYCLE CACHE = uint NO CACHE NOCACHE SET GENERATOR sequenceName TO uint

alterSessionStatement ::=

ALTER SESSION SET CURRENT_SCHEMA = schemaName

alterTableStatement ::=

ALTER TABLE IF EXISTS ONLY tableName ADD constraint CONSTRAINT constraintName constraint COLUMN IF NOT EXISTS column FIRST BEFORE columnName AFTER columnName ( , CONSTRAINT constraintName constraint constraint column ) ALTER MODIFY COLUMN identifier SET DATA TYPE dataType NOT NULL dataType CONSTRAINT constraintName NOT NULL DROP NOT NULL SET NOT NULL SET DEFAULT concat DROP DEFAULT RENAME TO AS identifier column ( column ) CONSTRAINT constraintName constraintState COMMENT = IS stringLiteral SET OPTIONS ( DESCRIPTION = stringLiteral ) DROP COLUMN IF EXISTS identifier CASCADE RESTRICT CONSTRAINT IF EXISTS constraintName CASCADE RESTRICT UNIQUE constraintName ( sortFields ) CASCADE RESTRICT FOREIGN KEY constraintName PRIMARY KEY constraintName CASCADE RESTRICT RENAME COLUMN INDEX CONSTRAINT identifier TO AS identifier OWNER TO userName

alterTypeStatement ::=

ALTER TYPE typeName RENAME TO typeName SET SCHEMA schemaName ADD VALUE stringLiteral RENAME VALUE stringLiteral TO stringLiteral OWNER TO userName

alterViewStatement ::=

ALTER VIEW IF EXISTS tableName RENAME TO AS tableName OWNER TO userName

commentStatement ::=

COMMENT ON TABLE tableName IS stringLiteral columnName IS stringLiteral , columnName IS stringLiteral COLUMN fieldName VIEW tableName IS stringLiteral

createDatabaseStatement ::=

CREATE DATABASE IF NOT EXISTS catalogName

createDomainStatement ::=

CREATE DOMAIN IF NOT EXISTS domainName AS dataType DEFAULT concat constraint CONSTRAINT constraintName constraint

createFunctionStatement ::=

CREATE OR ALTER REPLACE FUNCTION functionName ( parameterDeclarations ) RETURNS RETURN RETURNING dataType NO SQL CONTAINS SQL READS SQL DATA MODIFIES SQL DATA NOT DETERMINISTIC RETURNS NULL ON NULL INPUT CALLED ON NULL INPUT AS IS declarationStatement ; BEGIN proceduralStatements END proceduralStatement

createIndexStatement ::=

CREATE UNIQUE INDEX IF NOT EXISTS indexName indexType ( sortFields ) ON tableName indexType ( sortFields ) indexType INCLUDE COVERING STORING ( identifiers ) WHERE condition EXCLUDE NULL KEYS

createProcedureStatement ::=

CREATE OR ALTER REPLACE PROC PROCEDURE procedureName ( parameterDeclarations ) NO SQL CONTAINS SQL READS SQL DATA MODIFIES SQL DATA AS IS declarationStatement ; BEGIN proceduralStatements END proceduralStatement

createSchemaStatement ::=

CREATE SCHEMA IF NOT EXISTS schemaName AUTHORIZATION userName schemaName AUTHORIZATION userName

createSequenceStatement ::=

CREATE SEQUENCE GENERATOR IF NOT EXISTS sequenceName START WITH = int INCREMENT BY = int MINVALUE = int NO MINVALUE NOMINVALUE MAXVALUE = int NO MAXVALUE NOMAXVALUE CYCLE NO CYCLE NOCYCLE CACHE = uint NO CACHE NOCACHE

createTableStatement ::=

CREATE GLOBAL TEMP TEMPORARY VIRTUAL TABLE CT IF NOT EXISTS tableName USING identifier ( identifiers ) AS select ( , CONSTRAINT constraintName constraint constraint index column ) ON COMMIT DELETE ROWS DROP PRESERVE ROWS COMMENT = IS stringLiteral OPTIONS ( DESCRIPTION = stringLiteral )

createTriggerStatement ::=

CREATE OR ALTER REPLACE TRIGGER ON table BEFORE FOR AFTER INSTEAD OF INSERT UPDATE OF fields DELETE OR , INSERT UPDATE OF fields DELETE ON table REFERENCING OLD NEW ROW AS identifier FOR EACH ROW STATEMENT WHEN ( condition ) AS proceduralStatement

createTypeStatement ::=

CREATE TYPE typeName AS ENUM ( , stringLiteral )

createViewStatement ::=

CREATE OR ALTER REPLACE FORCE VIEW CV IF NOT EXISTS tableName ( fieldNames ) AS select

dropDatabaseStatement ::=

DROP DATABASE IF EXISTS catalogName IF EXISTS

dropDomainStatement ::=

DROP DOMAIN IF EXISTS domainName IF EXISTS CASCADE RESTRICT

dropFunctionStatement ::=

DROP FUNCTION IF EXISTS functionName IF EXISTS

dropIndexStatement ::=

DROP INDEX IF EXISTS indexName IF EXISTS ON tableName CASCADE RESTRICT

dropProcedureStatement ::=

DROP PROC PROCEDURE IF EXISTS procedureName IF EXISTS

dropSequenceStatement ::=

DROP SEQUENCE GENERATOR IF EXISTS sequenceName IF EXISTS RESTRICT

dropSchemaStatement ::=

DROP SCHEMA IF EXISTS schemaName IF EXISTS CASCADE RESTRICT

dropTableStatement ::=

DROP TEMPORARY TABLE IF EXISTS tableName IF EXISTS CASCADE CONSTRAINTS RESTRICT

dropTriggerStatement ::=

DROP TRIGGER IF EXISTS triggerName IF EXISTS

dropTypeStatement ::=

DROP TYPE IF EXISTS , typeName IF EXISTS CASCADE RESTRICT

dropViewStatement ::=

DROP VIEW IF EXISTS tableName IF EXISTS

renameStatement ::=

RENAME COLUMN fieldName TO AS fieldName DATABASE catalogName TO AS catalogName INDEX indexName TO AS indexName SCHEMA schemaName TO AS schemaName SEQUENCE sequenceName TO AS sequenceName VIEW tableName TO AS tableName TABLE tableName TO AS tableName

setCatalogStatement ::=

SET CATALOG catalogName

setSchemaStatement ::=

SET OPEN CURRENT SCHEMA CURRENT SQLID = schemaName stringLiteral

useStatement ::=

USE DATABASE catalogName schemaName

truncateStatement ::=

TRUNCATE TABLE tableName CONTINUE IDENTITY RESTART IDENTITY CASCADE RESTRICT

grantStatement ::=

GRANT SELECT INSERT UPDATE DELETE ON tableName TO userName roleName PUBLIC WITH GRANT OPTION

revokeStatement ::=

REVOKE GRANT OPTION FOR SELECT INSERT UPDATE DELETE ON tableName FROM userName roleName PUBLIC

resultStatement ::=

selectStatement insertStatement updateStatement deleteStatement RETURNING * fields selectStatement = select

insertStatement ::=

with INSERT INS INTO tableName ( select ) AS identifier ( identifiers ) values DEFAULT VALUES SET setClauses select ON DUPLICATE KEY UPDATE SET setClauses WHERE condition ON DUPLICATE KEY IGNORE ON CONFLICT ON CONSTRAINT constraintName ( fieldNames ) WHERE condition DO NOTHING UPDATE SET setClauses WHERE condition

values ::=

VALUES , rowValueExpression

updateStatement ::=

with UPDATE UPD topSimple tableName periodPortion ( select ) AS identifier FROM tables SET setClauses SET setClauses FROM tables WHERE condition ALL ORDER BY sortFields LIMIT uint

setClauses ::=

, setClause

setClause ::=

fieldName = field rowValueExpression = rowValueExpression select

deleteStatement ::=

with DELETE DEL topSimple FROM tableName periodPortion ( select ) AS identifier USING FROM tables WHERE condition ALL ORDER BY sortFields LIMIT uint

mergeStatement ::=

with MERGE INTO tableName AS identifier USING ( select ) correlationName ON condition WHEN MATCHED AND condition THEN DELETE UPDATE SET setClauses WHERE condition DELETE WHERE condition WHEN NOT MATCHED AND condition THEN INSERT ( identifiers ) VALUES ( fields ) WHERE condition

column ::=

identifier dataType DEFAULT ON NULL concat WITH VALUES ON UPDATE field COMPUTED BY GENERATED ALWAYS AS field GENERATED ALWAYS BY DEFAULT ON NULL AS IDENTITY ( identity ) CONSTRAINT constraintName NOT NULL PRIMARY KEY UNIQUE KEY INDEX CHECK ( condition ) FOREIGN KEY REFERENCES constraintReferenceSpecification AUTO_INCREMENT AUTOINCREMENT IDENTITY ( int , int ) READONLY COMMENT = IS stringLiteral OPTIONS ( DESCRIPTION = stringLiteral )

index ::=

KEY INDEX identifier indexType ( sortFields ) indexType

indexType ::=

USING identifier

constraint ::=

NOT NULL PRIMARY KEY indexType CLUSTERED NONCLUSTERED ( fieldNames ) indexType UNIQUE KEY INDEX identifier indexType ( sortFields ) indexType FOREIGN KEY ( fieldNames ) REFERENCES constraintReferenceSpecification CHECK ( condition ) constraintState

constraintState ::=

constraintDeferrability constraintEnforcement

constraintDeferrability ::=

NOT DEFERRABLE INITIALLY DEFERRED IMMEDIATE INITIALLY DEFERRED IMMEDIATE NOT DEFERRABLE

constraintEnforcement ::=

ENABLE DISABLE NOT ENFORCED

constraintReferenceSpecification ::=

tableName ( fieldNames ) ON DELETE UPDATE CASCADE NO ACTION RESTRICT SET DEFAULT SET NULL

identity ::=

identityProperty , identityProperty

identityProperty ::=

START WITH LIMIT VALUE uint INCREMENT BY uint MAXVALUE uint NOMAXVALUE MINVALUE uint NOMINVALUE CACHE uint NOCACHE CYCLE NOCYCLE ORDER NOORDER

parameterDeclarations ::=

, parameterDeclaration

parameterDeclaration ::=

IN OUT IN OUT INOUT parameterName AS dataType = := DEFAULT field OUT OUTPUT READONLY

with ::=

WITH RECURSIVE , commonTableExpression

commonTableExpression ::=

identifier ( identifiers ) AS NOT MATERIALIZED ( resultStatement )

select ::=

with queryExpressionBody orderBy seekFetch offsetFetch forXML forJSON forUpdate

queryExpressionBody ::=

queryTerm UNION EXCEPT MINUS ALL DISTINCT queryTerm

queryTerm ::=

queryPrimary INTERSECT ALL DISTINCT queryTerm

queryPrimary ::=

( select ) SELECT SEL distinct top selectList INTO tableName variableNames tableExpression values TABLE tableName

distinct ::=

DISTINCT UNIQUE ON ( fields ) ALL

topSimple ::=

TOP uint PERCENT

top ::=

TOP uint PERCENT START AT uint WITH TIES SKIP uint FIRST uint

selectList ::=

, selectField

selectField ::=

* EXCEPT ( fields ) tableName . * EXCEPT ( fields ) field AS identifier

tableExpression ::=

FROM tables WHERE condition connectBy groupBy HAVING condition WINDOW windows QUALIFY condition

connectBy ::=

START WITH condition CONNECT BY NOCYCLE condition CONNECT BY NOCYCLE condition START WITH condition

groupBy ::=

GROUP BY ALL DISTINCT () ROLLUP ( fields ) CUBE ( fields ) GROUPING SETS ( , groupingSet ) fields WITH ROLLUP

groupingSet ::=

( fields )

windows ::=

, window

window ::=

identifier AS ( windowSpecification )

windowSpecification ::=

PARTITION BY fields ORDER BY sortFields ROWS RANGE GROUPS BETWEEN rangeBound AND rangeBound rangeBound EXCLUDE CURRENT ROW TIES GROUPS NO OTHERS

orderBy ::=

ORDER SIBLINGS BY sortFields

seekFetch ::=

SEEK fields FETCH FIRST NEXT uint PERCENT ROW ROWS ONLY WITH TIES LIMIT uint PERCENT WITH TIES

offsetFetch ::=

OFFSET uint ROW ROWS FETCH FIRST NEXT uint PERCENT ROW ROWS ONLY WITH TIES LIMIT uint PERCENT WITH TIES LIMIT uint PERCENT WITH TIES OFFSET uint , uint ROWS uint TO uint

forUpdate ::=

FOR SHARE FOR KEY SHARE FOR NO KEY UPDATE FOR UPDATE OF fields NOWAIT WAIT uint SKIP LOCKED

forXML ::=

FOR XML RAW ( stringLiteral ) AUTO PATH ( stringLiteral ) , ELEMENTS XSINIL ABSENT TYPE ROOT ( stringLiteral )

forJSON ::=

FOR JSON JSONB AUTO PATH , INCLUDE_NULL_VALUES WITHOUT_ARRAY_WRAPPER ROOT ( stringLiteral )

sortFields ::=

, sortField

sortField ::=

field ASC DESC NULLS FIRST NULLS LAST

tables ::=

, table

table ::=

lateral unqualifiedJoin innerJoin outerJoin semiAntiJoin

optionallyQualifiedJoin ::=

CROSS JOIN table joinQualification lateral

unqualifiedJoin ::=

CROSS APPLY OUTER APPLY NATURAL LEFT RIGHT FULL OUTER JOIN lateral

innerJoin ::=

INNER JOIN STRAIGHT_JOIN table joinQualification

outerJoin ::=

LEFT RIGHT FULL OUTER JOIN table PARTITION BY ( fields ) joinQualification

semiAntiJoin ::=

LEFT SEMI ANTI JOIN table joinQualification

lateral ::=

LATERAL tableFactor tableFactor

tableFactor ::=

tableName versions correlationName tableHints ( table ) correlationName ( select ) correlationName tableFunction correlationName UNNEST ( field ) values correlationName OLD TABLE ( updateStatement deleteStatement mergeStatement ) NEW FINAL TABLE ( insertStatement updateStatement mergeStatement ) JSON_TABLE ( field , field COLUMNS ( , jsonTableColumn ) ) XMLTABLE ( field PASSING BY REF VALUE field COLUMNS , xmlTableColumn )

jsonTableColumn ::=

identifier dataType PATH stringLiteral FOR ORDINALITY

xmlTableColumn ::=

identifier dataType PATH stringLiteral FOR ORDINALITY

tableFunction ::=

GENERATE_SERIES SYSTEM_RANGE ( numericOp , numericOp , numericOp ) TABLE ( GENERATOR ( ROWCOUNT => unsignedInteger ) )

tableHints ::=

WITH ( , tableHint )

pivot ::=

todo

versions ::=

VERSIONS BETWEEN SCN TIMESTAMP MINVALUE field AND MAXVALUE field AS OF SCN TIMESTAMP FOR periodSpecification

periodSpecification ::=

periodName AS OF field BETWEEN field AND field periodSpecificationFromTo CONTAINED IN ( field , field ) ALL

periodPortion ::=

FOR PORTION OF periodSpecificationFromTo

periodSpecificationFromTo ::=

FROM field TO field

periodName ::=

name

joinQualification ::=

ON condition USING ( identifiers )

correlationName ::=

AS identifier ( identifiers )

rowValueExpression ::=

ROW ( fields )

fields ::=

, field

field ::=

or

condition ::=

or

or ::=

OR and

and ::=

AND not

not ::=

NOT predicate

predicate ::=

EXISTS ( select ) JSON_EXISTS ( field , field TRUE FALSE UNKNOWN ERROR ON ERROR ) REGEXP_LIKE ( concat , concat ) ST_CONTAINS ( field , field ) SDO_CONTAINS ( field , field ) = 'TRUE' field . STContains ( field ) ST_CROSSES ( field , field ) field . STCrosses ( field ) ST_DISJOINT ( field , field ) field . STDisjoint ( field ) ST_EQUALS ( field , field ) SDO_EQUAL ( field , field ) = 'TRUE' field . STEquals ( field ) ST_INTERSECTS ( field , field ) field . STIntersects ( field ) ST_ISCLOSED ( field ) field . STIsClosed ( ) ST_ISEMPTY ( field ) field . STIsEmpty ( ) ST_OVERLAPS ( field , field ) SDO_OVERLAPS ( field , field ) = 'TRUE' field . STOverlaps ( field ) ST_TOUCHES ( field , field ) SDO_TOUCH ( field , field ) = 'TRUE' field . STTouches ( field ) ST_WITHIN ( field , field ) SDO_INSIDE ( field , field ) = 'TRUE' field . STWithin ( field ) UNIQUE ( select ) XMLEXISTS ( field PASSING BY REF VALUE field ) concat comparator ALL ANY SOME ( select fields ) concat IS NOT NULL DOCUMENT JSON DISTINCT FROM concat concat NOT IN ( select fields ) field BETWEEN SYMMETRIC concat AND concat REGEXP RLIKE LIKE_REGEX concat LIKE ANY ALL ( , concat ) ESCAPE characterLiteral LIKE ILIKE concat ESCAPE characterLiteral SIMILAR TO concat ESCAPE characterLiteral @> concat ~~ ~~* !~~ !~~* ~ !~ concat concat *= concat concat =* concat row2 OVERLAPS row2

row2 ::=

ROW ( field , field )

concat ::=

|| collated

collated ::=

numericOp COLLATE collation

numericOp ::=

sum << >> sum

sum ::=

factor + - factor

factor ::=

exp * / % MOD exp

exp ::=

unaryOps ^ ** unaryOps

unaryOps ::=

+ - CONNECT_BY_ROOT term (+) :: dataType

term ::=

: identifier ? binaryLiteral bitLiteral stringLiteral ADD_YEARS ADD_MONTHS ADD_DAYS ADD_HOURS ADD_MINUTES ADD_SECONDS ( field , field ) ANY ( field ) filter over ANY_VALUE ( field ) filter over ACOS ( numericOp ) ARRAY [ fields ] ( select ) ARRAY_AGG ( DISTINCT field ORDER BY sortFields ) filter over ARRAY_GET ( field , field ) ASC ASCII ASCII_VAL ( field ) ASCII_CHAR ( field ) ASIN ( numericOp ) ATAN ( numericOp ) ATN2 ATAN2 ( numericOp , numericOp ) AVG ( DISTINCT ALL field ) keep filter over BIN_SHL ( field , field ) BIN_SHR ( field , field ) BIT_LENGTH ( field ) BITCOUNT BIT_COUNT ( field ) BIN_AND BIN_AND_AGG BITAND BITAND_AGG BIT_AND BIT_AND_AGG ( field ) filter over BIN_NAND BITNAND BIT_NAND ( field , field ) BIN_NOR BITNOR BIT_NOR ( field , field ) BIN_NOT BITNOT BIT_NOT ( field ) BIN_OR BITOR BIT_OR ( field , field ) BIN_OR BIN_OR_AGG BITOR BITOR_AGG BIT_OR BIT_OR_AGG ( field ) filter over BIN_XNOR BITXNOR BIT_XNOR ( field , field ) BIN_XOR BITXOR BIT_XOR ( field , field ) BIN_XOR BIN_XOR_AGG BITXOR BITXOR_AGG BIT_XOR BIT_XOR_AGG ( field ) filter over BOOL_AND BOOLAND_AGG EVERY LOGICAL_AND ( field ) filter over BOOL_OR BOOLOR_AGG LOGICAL_OR ( field ) filter over CARDINALITY ( field ) case CAST ( field AS castDataType ) CEIL CEILING ( numericOp ) CENTURY ( field ) CHARINDEX ( field , field , field ) CHAR_LENGTH ( field ) CHOOSE ( fields ) CHR CHAR ASCII_CHAR ( field ) COALESCE ( fields ) COERCE ( field AS castDataType ) CONCAT ( fields ) CONNECT_BY_ISCYCLE CONNECT_BY_ISLEAF CONVERT ( dataType , field , uint ) COS ( numericOp ) COSH ( numericOp ) COT ( numericOp ) COTH ( numericOp ) COUNT ( DISTINCT ALL tableName . * field rowValueExpression ) keep filter over COUNTIF COUNT_IF ( condition ) over CORR ( numericOp , numericOp ) filter over COVAR_POP ( numericOp , numericOp ) filter over COVAR_SAMP ( numericOp , numericOp ) filter over CUME_DIST ( ) over ( fields ) withinGroup CURRVAL ( name stringLiteral ) CURRENT_CATALOG ( ) CURRENT_DATABASE ( ) CURRENT DATE CURRENT_DATE ( ) CURRENT SCHEMA CURRENT_SCHEMA ( ) CURRENT TIME CURRENT_TIME ( ) CURRENT TIMESTAMP CURRENT_TIMESTAMP ( uint ) CURRENT USER CURRENT_USER ( ) CURDATE ( ) CURTIME ( ) DATABASE ( ) dateLiteral DATEADD ( datePart , field , field ) DATEDIFF ( datePart , field , field ) DATE_DIFF ( field , field , datePart ) DATEPART ( datePart , field ) DATE_ADD ( field , field ) DATE_SUB ( field , field ) DATE_TRUNC DATETIME_TRUNC ( stringLiteral , field field , datePart ) DAY ( field ) DAYOFMONTH ( field ) DAYOFWEEK ( field ) DB_NAME ( ) DBINFO ( field ) DECADE ( field ) DECODE MAP ( field , field , field , field ) DENSE_RANK DENSERANK ( ) over ( fields ) withinGroup DEG DEGREE DEGREES ( numericOp ) DIGITS ( field ) EPOCH ( field ) EXTRACT ( datePart FROM field ) EXP ( numericOp ) FLOOR ( numericOp ) FIELD ( field , fields ) FIRST_VALUE ( field RESPECT NULLS IGNORE NULLS ) RESPECT NULLS IGNORE NULLS over GETDATE ( ) GREATEST MAX MAXVALUE ( fields ) GROUP_CONCAT ( DISTINCT field ORDER BY sortFields SEPARATOR stringLiteral ) GROUP_ID ( ) GROUPING_ID ( fields ) GROUPING ( fields ) HEX TO_HEX ( field ) HOUR ( field ) IFNULL ( field , field ) INSERT ( field , field , field , field ) INSTR ( field , field , field ) intervalLiteral IF IIF ( condition , field , field ) ISNULL ( field , field ) JSON [ fields ] { field : field , field : field } JSON_AGG JSONB_AGG ( field ORDER BY sortFields ) filter over JSON_ARRAY ( fields jsonNull jsonReturning ) JSON_ARRAYAGG ( field ORDER BY sortFields jsonNull jsonReturning ) JSON_BUILD_ARRAY JSONB_BUILD_ARRAY ( fields ) JSON_BUILD_OBJECT JSONB_BUILD_OBJECT ( fields ) JSON_OBJECT ( jsonEntries jsonNull jsonReturning ) JSON_OBJECT_AGG JSONB_OBJECT_AGG ( field , field ) JSON_OBJECTAGG ( jsonEntry jsonNull jsonReturning ) JSON_VALUE ( field , field ERROR NULL DEFAULT field ON EMPTY ON ERROR jsonReturning ) LOWER LCASE ( field ) LPAD ( field , field , field ) LTRIM ( field , field ) LEFT ( field , field ) LEN ( field ) LENGTH ( field ) LN LOGN ( numericOp ) LOCATE ( field , field , field ) LOCATE_IN_STRING ( field , field , field ) LOG ( numericOp , numericOp ) LOG10 ( numericOp ) LEVEL LEAST MIN MINVALUE ( fields ) LEAD ( field , uint , field RESPECT NULLS IGNORE NULLS ) RESPECT NULLS IGNORE NULLS over LAG ( field , uint , field RESPECT NULLS IGNORE NULLS ) RESPECT NULLS IGNORE NULLS over LAST_DAY ( field ) LAST_VALUE ( field RESPECT NULLS IGNORE NULLS ) RESPECT NULLS IGNORE NULLS over LISTAGG ( field , stringLiteral ) withinGroup over MAX ( DISTINCT ALL field ) keep filter over MD5 HASH_MD5 ( field ) MEDIAN ( field ) filter over MICROSECOND ( field ) MID ( field , field , field ) MILLISECOND ( field ) MIN ( DISTINCT ALL field ) keep filter over MINUTE ( field ) MOD ( field , field ) MODE ( ) withinGroup over MONTH ( field ) MUL PRODUCT ( DISTINCT ALL field ) keep filter over MULTISET ( select ) MULTISET_AGG ( field ORDER BY sortFields ) filter over NEXT VALUE FOR sequenceName NEXTVAL ( name stringLiteral ) NEWID ( field ) NOW ( uint ) NTH_VALUE ( field , uint FROM FIRST FROM LAST RESPECT NULLS IGNORE NULLS ) FROM FIRST FROM LAST RESPECT NULLS IGNORE NULLS over NTILE ( uint ) over NULLIF ( field , field ) NVL ( field , field ) NVL2 ( field , field , field ) OCTET_LENGTH BYTE_LENGTH DATALENGTH LENGTHB ( field ) OVERLAY ( field PLACING field FROM field FOR field ) PI ( ) POSITION ( field IN field ) PERCENT_RANK ( ) over ( fields ) withinGroup PERCENTILE_CONT PERCENTILE_DISC ( field ) withinGroup over POW POWER ( field , field ) PRIOR concat QUARTER ( field ) REGR_SLOPE REGR_INTERCEPT REGR_COUNT REGR_R2 REGR_AVGX REGR_AVGY REGR_SXX REGR_SYY REGR_SXY ( numericOp , numericOp ) filter over RAD RADIAN RADIANS ( numericOp ) RANK ( ) over ( fields ) withinGroup RATIO_TO_REPORT ( field ) over REGEXP_REPLACE ( field , field , field ) REGEXP_REPLACE_ALL ( field , field , field ) REGEXP_REPLACE_FIRST ( field , field , field ) REPEAT REPLICATE ( field , field ) REPLACE OREPLACE ( field , field , field ) REPLACE_REGEXPR ( field IN field WITH field OCCURRENCE ALL unsignedInteger ) REVERSE STRREVERSE ( field ) RIGHT ( field , field ) ROUND ( field , uint ) ROW_NUMBER ROWNUMBER ( ) over ROWNUM RPAD ( field , field , field ) RTRIM ( field , field ) SCHEMA ( ) SECOND ( field ) SEQ4 SEQ8 ( ) SHL SHIFTLEFT LSHIFT ( field , field ) SHR SHIFTRIGHT RSHIFT ( field , field ) SIGN SGN ( field ) SQR SQRT ( numericOp ) SQUARE ( numericOp ) SIN ( numericOp ) SINH ( numericOp ) SPLIT_PART ( field , field , field ) SPACE ( field ) STDDEV STDDEV_POP STDEVP ( field ) over STDDEV_SAMP STDEV STDEV_SAMP ( field ) over STR_REPLACE ( field , field , field ) ST_AREA ( field ) SDO_GEOM . SDO_AREA ( field , field ) field . STArea ( ) ST_ASBINARY ( field ) field . Get_WKB ( ) STAsBinary ( ) ST_ASTEXT ( field ) field . Get_WKT ( ) STAsText ( ) ST_CENTROID ( field ) SDO_GEOM . SDO_CENTROID ( field , field ) field . STCentroid ( ) ST_DIFFERENCE ( field , field ) SDO_GEOM . SDO_DIFFERENCE ( field , field , field ) field . STDifference ( field ) ST_DISTANCE ( field , field ) SDO_GEOM . SDO_DISTANCE ( field , field , field ) field . STDistance ( field ) ST_ENDPOINT ( field ) field . STEndPoint ( ) ST_EXTERIORRING ( field ) field . STExteriorRing ( ) ST_GEOMETRYN ( field , field ) field . STGeometryN ( field ) ST_GEOMETRYTYPE ( field ) field . STGeometryType ( ) ST_GEOMFROMWKB SDO_GEOMETRY GEOMETRY GEOGRAPHY :: STGeomFromWKB ( field , field ) ST_GEOMFROMTEXT SDO_GEOMETRY GEOMETRY GEOGRAPHY :: STGeomFromText ( field , field ) ST_INTERIORRINGN ( field ) field . STInteriorRingN ( ) ST_INTERSECTION ( field , field ) SDO_GEOM . SDO_INTERSECTION ( field , field , field ) field . STIntersection ( field ) ST_LENGTH ( field ) SDO_GEOM . SDO_LENGTH ( field , field ) field . STLength ( ) ST_NUMGEOMETRIES ( field ) SDO_UTIL . GETNUMELEM ( field ) field . STNumGeometries ( ) ST_NUMINTERIORRING ST_NUMINTERIORRINGS ( field ) field . STNumInteriorRing ( ) ST_NUMPOINTS ( field ) field . STNumPoints ( ) ST_POINTN ( field , field ) field . STPointN ( field ) ST_SRID ( field ) field . SDO_SRID field . STSrid ( ) ST_STARTPOINT ( field ) field . STStartPoint ( ) ST_UNION ( field , field ) SDO_GEOM . SDO_UNION ( field , field , field ) field . STUnion ( field ) ST_X ( field ) field . SDO_POINT . X STX ST_Y ( field ) field . SDO_POINT . Y STY ST_Z ( field ) field . SDO_POINT . Z STZ SUBSTR SUBSTRING ( field , numericOp , numericOp ) SUBSTRING ( field FROM numericOp FOR numericOp ) SUBSTRING_INDEX ( field , field , field ) SUM ( DISTINCT ALL field ) keep filter over SYS_CONNECT_BY_PATH ( field , stringLiteral ) TAN ( numericOp ) TANH ( numericOp ) timeLiteral timestampLiteral TIMESTAMP_DIFF ( field , field , datePart ) TIMEZONE ( field ) TIMEZONE_HOUR ( field ) TIMEZONE_MINUTE ( field ) TO_CHAR ( field , field ) TO_DATE ( field , field ) TO_NUMBER ( field ) TO_TIMESTAMP ( field , field ) TRANSLATE OTRANSLATE ( field , field , field ) TRIM ( field , field ) TRIM ( LEADING L TRAILING T BOTH B field FROM field ) TRUNC ( field , stringLiteral ) TRUNC TRUNCATE TRUNCNUM ( numericOp , numericOp ) truthValue UNIX_TIMESTAMP ( field ) UUID UUID_GENERATE UUID_STRING GENGUID GENERATE_UUID GEN_RANDOM_UUID RANDOM_UUID SYS_GUID SYSUUID ( ) UPPER UCASE ( field ) VAR_POP VARIANCE VARP ( field ) filter over VAR_SAMP VARIANCE_SAMP VAR ( field ) filter over WIDTH_BUCKET ( field , field , field , field ) XMLAGG ( field ORDER BY sortFields ) filter over XMLCOMMENT ( field ) XMLCONCAT ( fields ) XMLDOCUMENT ( field ) XMLELEMENT ( NAME identifier , XMLATTRIBUTES ( field AS identifier ) , field AS identifier ) XMLFOREST ( field AS identifier , field AS identifier ) XMLPARSE ( DOCUMENT CONTENT field ) XMLPI ( NAME identifier , field ) XMLQUERY ( field PASSING BY REF VALUE field RETURNING CONTENT ) XMLSERIALIZE ( DOCUMENT CONTENT field ) XMLPI ( NAME identifier , field ) YEAR ( field ) ZEROIFNULL ( field ) unsignedNumericLiteral ( select ) rowValueExpression { d stringLiteral } { t stringLiteral } { fn term } { ts stringLiteral } identifier ( fields )

jsonNull ::=

NULL ON NULL ABSENT ON NULL

jsonReturning ::=

RETURNING dataType

jsonEntries ::=

, jsonEntry

jsonEntry ::=

KEY field VALUE field field , field

truthValue ::=

TRUE FALSE NULL

datePart ::=

YEAR YYYY YY MONTH MM M DAY DD D HOUR HH MINUTE MI N SECOND SS S MILLISECOND MS MICROSECOND MCS NANOSECOND NS EPOCH QUARTER QQ Q WEEK WW WK ISO_DAY_OF_WEEK ISODOW DAY_OF_WEEK DAYOFWEEK WEEKDAY W DAY_OF_YEAR DAYOFYEAR DOY DY Y

keep ::=

KEEP ( DENSE_RANK FIRST LAST ORDER BY sortFields )

filter ::=

FILTER ( WHERE condition )

over ::=

OVER identifier ( windowSpecification )

withinGroup ::=

WITHIN GROUP ( ORDER BY sortFields )

rangeBound ::=

UNBOUNDED uint PRECEDING FOLLOWING CURRENT ROW

case ::=

CASE WHEN condition THEN field field WHEN field THEN field ELSE field END

comparator ::=

= != <> ^= >= > <=> <= < EQ NE GT GE LT LE

castDataType ::=

dataType SIGNED INTEGER UNSIGNED INTEGER

dataType ::=

ARRAY AUTO_INCREMENT ( fields ) BIGINT UNSIGNED BINARY VARYING ( uint ) BIT ( uint ) BLOB ( uint ) SUB_TYPE 0 BINARY 1 TEXT BOOL BOOLEAN CHAR CHARACTER VARYING ( uint BYTE CHAR ) FOR BIT DATA COLLATE collationName CHAR CHARACTER LARGE OBJECT CLOB ( uint ) COLLATE collationName DATE DEC DECIMAL ( * uint , int ) DOUBLE PRECISION ( uint , uint ) ENUM ( stringLiteral , stringLiteral ) COLLATE collationName FLOAT ( uint , uint ) GEOGRAPHY GEOMETRY IDENTITY ( fields ) INT INTEGER ( uint ) UNSIGNED INTERVAL YEAR ( uint ) TO MONTH DAY ( uint ) TO SECOND ( uint ) JSON JSONB LONGBLOB LONGTEXT COLLATE collationName LONG NVARCHAR ( uint ) COLLATE collationName LONG VARBINARY ( uint ) LONG VARCHAR ( uint ) FOR BIT DATA COLLATE collationName MEDIUMBLOB MEDIUMINT ( uint ) UNSIGNED MEDIUMTEXT COLLATE collationName NATIONAL CHAR CHARACTER VARYING ( uint ) COLLATE collationName NCHAR ( uint ) COLLATE collationName NCLOB COLLATE collationName NUMBER NUMERIC ( * uint , int ) NVARCHAR ( uint ) COLLATE collationName OTHER REAL ( uint , uint ) SERIAL SERIAL4 SERIAL8 SET ( stringLiteral , stringLiteral ) COLLATE collationName SMALLINT ( uint ) UNSIGNED TEXT ( uint ) COLLATE collationName TIMESTAMP ( uint ) WITH WITHOUT TIME ZONE TIMESTAMPTZ ( uint ) TIME ( uint ) WITH WITHOUT TIME ZONE TIMETZ ( uint ) TINYBLOB TINYINT ( uint ) UNSIGNED TINYTEXT COLLATE collationName UUID VARCHAR CHARACTER VARYING ( uint BYTE CHAR ) FOR BIT DATA COLLATE collationName VARCHAR_IGNORECASE ( uint ) VARCHAR2 ( uint BYTE CHAR ) COLLATE collationName VARBINARY ( uint ) XML arraySuffix

arraySuffix ::=

ARRAY [ uint ]

constraintName ::=

identifier

catalogName ::=

name

domainName ::=

name

schemaName ::=

name

tableName ::=

name

triggerName ::=

name

typeName ::=

name

functionName ::=

name

indexName ::=

name

parameterName ::=

name

procedureName ::=

name

sequenceName ::=

name

userName ::=

name

roleName ::=

name

fieldNames ::=

, fieldName

fieldName ::=

name

collation ::=

name

variableNames ::=

, variableName

variableName ::=

name

labelName ::=

name

name ::=

. identifier

binaryLiteral ::=

X ' characters '

bitLiteral ::=

B ' 0 1 '

stringLiteral ::=

N ' character ' $ nonSpaceCharacter $ character $ nonSpaceCharacter $ q'[ characters ]' q'{ characters }' q'( characters )' q'< characters >' q' nonSpaceCharacter characters nonSpaceCharacter '

characterLiteral ::=

' character '

dateLiteral ::=

DATE stringLiteral

timeLiteral ::=

TIME stringLiteral

timestampLiteral ::=

TIMESTAMP stringLiteral

intervalLiteral ::=

INTERVAL stringLiteral field YEAR TO MONTH YEARS QUARTER QUARTERS MONTH MONTHS WEEK WEEKS DAY ( uint ) TO HOUR MINUTE SECOND ( uint ) DAYS HOUR ( uint ) TO MINUTE SECOND ( uint ) HOURS MINUTE ( uint ) TO SECOND ( uint ) MINUTES SECOND ( uint ) SECONDS MILLISECOND ( uint ) MILLISECONDS MICROSECOND ( uint ) MICROSECONDS NANOSECOND ( uint ) NANOSECONDS

int ::=

signedInteger

signedInteger ::=

todo

uint ::=

unsignedInteger

unsignedInteger ::=

todo

unsignedNumericLiteral ::=

todo

signedFloatLiteral ::=

todo

unsignedFloatLiteral ::=

todo

identifiers ::=

, identifier

identifier ::=

identifierStart identifierPart " doubleQuotedIdentifierPart " ` backtickQuotedIdentifierPart ` [ brackedQuotedIdentifierPart ]

identifierStart ::=

todo

identifierPart ::=

todo

doubleQuotedIdentifierPart ::=

nonDoubleQuoteCharacter doubleQuote

backtickQuotedIdentifierPart ::=

nonBacktickCharacter doubleBacktick

brackedQuotedIdentifierPart ::=

nonClosingBracketCharacter doubleClosingBracket

nonDoubleQuoteCharacter ::=

todo

nonBacktickCharacter ::=

todo

nonClosingBracketCharacter ::=

todo

doubleQuote ::=

""

doubleBacktick ::=

``

doubleClosingBracket ::=

]]

The diagrams have been created with the neat RRDiagram library by Christopher Deckers.

References to this page

Feedback

Do you have any feedback about this page? We'd love to hear it!

The jOOQ Logo