本文介绍Lindorm SQL的基本词法结构。
背景信息
一条SQL语句通常是由一个记号(Token)的序列构成,并以半角分号(;)结尾。这个记号可以是一个关键词、一个标识符、一个常量或一个特殊字符符号。两个记号间通常以空格、制表符或新的一行来分隔。
标识符
标识符在SQL语句中用于表示数据库、表、列或其他数据对象。Lindorm SQL的标识符使用反引号(`
)作为引用符。
未加引号的标识符,必须以字母开头,只能包含字母、数字和下划线(
_
)。加引号的标识符,例如
`Employee Name`
,以反引号开头和结尾。它们可以包含几乎任何字符,包括空格和其他标点符号。
此外,在Lindorm SQL语法中,不同层级的两个数据对象间通常使用半角句号(.
)进行分隔。 例如,想要显式指定数据库db中的表tbl时,可以用db.tbl
来指定。
常量
在Lindorm SQL中有两种隐式类型常量:字符串常量和数字常量。
字符串常量
字符串常量是指由半角单引号(
'
)包围的任意字符序列,例如'This is a string'
。从SQL引擎2.8.4.8版本开始,SQL的解析器新增了解析转义字符的功能。对于字符串常量中的反斜线(
\
)符号,解析器会结合后一个字符综合判断是否是要进行转义。具体规则如下:转义字符序列
实际表示的字符
\0
ASCII NUL(
X'00'
)字符。\'
半角单引号(
'
)字符。\"
半角双引号 (
"
)字符。\\
反斜线(
\
)字符。\Z
ASCII 26(Control+Z)控制字符。
\r
回车符。
\n
换行符。
如果希望字符串常量中的反斜线(
\
)仅作为普通字符处理,则可以通过将SQL引擎行为参数SQL_MODE设置为NO_BACKSLASH_ESCAPES
来取消转义行为。具体使用方式,请参见会话变量。说明如何查看Lindorm SQL版本,请参见SQL版本说明。
字符串转义处理仅对SQL语句中的字符串常量有效。使用参数化写入/查询(PreparedStatement)的方式传入的字符串参数不会被转义。
数字常量
Lindorm SQL支持以下形式的数字常量:
形式
说明
digits
digits表示一个或多个十进制数字(0~9)。
digitse[+-]digits
包含指数标记(e)的数字常量。例如4e3。
digits.[digits][e[+-]digits]
包含小数点(
.
)和指数标记(e)的数字常量。例如5.3e2。[digits].digits[e[+-]digits]
重要数字常量中不允许嵌入任何空格或除上述形式以外的字符。
如果数字常量中包含小数点(
.
),则小数点的前后都至少需要存在一个十进制数字。如果数字常量中包含指数标记(e),则指数标记的后面至少需要存在一个十进制数字。
特殊字符
一些不是字母或数字的字符在不同的使用环境下可能存在特殊的含义。
半角圆括号(
()
):用于将表达式进行分组,并强制优先。在某些特殊情况下,半角圆括号可能会被要求作为特定SQL语法的一部分。半角逗号(
,
):在某些语法结构中,用于分隔列表元素。半角分号(
;
):结束一个SQL命令。仅允许出现在SQL命令句尾或字符串常量中。半角冒号(
:
):冒号允许出现在标识符中,用于分隔列族名和列名。星号(
*
):用于在上下文中标记一个表的所有域或组合值。半角句号(
.
):多用于数字常量中,表示小数。也可以用于标识符中,分隔不同层级的数据对象。
关键字
SQL关键字分为保留关键字和非保留关键字。根据SQL标准规定,保留关键字是真正的关键字,仅在被引用符引用时才可以被用作标识符。非保留关键字只在特殊的环境中有特殊语义,因此可以在非语义环境中被用作标识符。
由于文档的更新可能存在延迟。从宽表引擎2.6.3开始,建议直接通过查询 INFORMATION_SCHEMA.KEYWORDS
系统视图搜索SQL引擎支持的保留关键字和非保留关键字。
Lindorm保留关键字
Lindorm SQL中的保留关键字列表如下:
首字母 | 保留关键字 |
A | ABS、ALL、ALLOCATE、ALLOW、ALTER、AND、ANY、ARE、ARRAY、ARRAY_MAX_CARDINALITY、AS、ASENSITIVE、ASYMMETRIC、AT、ATOMIC、AUTHORIZATION、AVG |
B | BEGIN、BEGIN_FRAME、BEGIN_PARTITION、BETWEEN、BIGINT、BINARY、BIT、BLOB、BOOLEAN、BOTH、BY |
C | CALL、CALLED、CARDINALITY、CASCADED、CASE、CAST、CEIL、CEILING、CHAR、CHARACTER、CHARACTER_LENGTH、CHAR_LENGTH、CHECK、CLASSIFIER、CLOB、CLOSE、COALESCE、COLLATE、COLLECT、COLUMN、COMMIT、CONDITION、 CONNECT、CONSTRAINT、CONTAINS、CONVERT、CORR、CORRESPONDING、COUNT、COVAR_POP、COVAR_SAMP、CREATE、CROSS、CUBE、CUME_DIST、CURRENT、CURRENT_CATALOG、CURRENT_DATE、CURRENT_DEFAULT_TRANSFORM_GROUP、CURRENT_PATH、CURRENT_ROLE、CURRENT_ROW、CURRENT_SCHEMA、CURRENT_TIME、CURRENT_TIMESTAMP、CURRENT_TRANSFORM_GROUP_FOR_TYPE、CURRENT_USER、CURSOR、CYCLE |
D | DATE、DATETIME、DAY、DEALLOCATE、DEC、DECIMAL、DECLARE、DEFAULT、DEFINE、DELETE、DENSE_RANK、DEREF、DESCRIBE、DETERMINISTIC、DISALLOW、DISCONNECT、DISTINCT、DOUBLE、DROP、DYNAMIC |
E | EACH、ELEMENT、ELSE、EMPTY、END、END-EXEC、END_FRAME、END_PARTITION、EQUALS、ESCAPE、EVERY、EXCEPT、 EXEC、EXECUTE、EXISTS、EXP、EXPLAIN、EXTEND、EXTERNAL、EXTRACT |
F | FALSE、FETCH、FILTER、FIRST_VALUE、FLOAT、FLOOR、 FOR、FOREIGN、FRAME_ROW、FREE、FRIDAY、FROM、FULL、FUNCTION、FUSION |
G | GEOMETRYCOLLECTION、GET、GLOBAL、GRANT、GROUP、GROUPING、GROUPS |
H | HAVING、HOLD、HOUR |
I | IDENTITY、IMPORT、IN、INDICATOR、INITIAL、INNER、INOUT、INSENSITIVE、INSERT、INT、INTEGER、INTERSECT、INTERSECTION、INTERVAL、INTO、IS |
J | JOIN、JSON_ARRAY、JSON_ARRAYAGG、JSON_EXISTS、JSON_OBJECT、JSON_OBJECTAGG、JSON_QUERY、JSON_VALUE |
L | LAG、LANGUAGE、LARGE、LAST_VALUE、LATERAL、LEAD、LEADING、LEFT、LIKE、LIKE_REGEX、LIMIT、LINESTRING、LN、LOCAL、LOCALTIME、LOCALTIMESTAMP、LOWER |
M | MATCH、MATCHES、MATCH_NUMBER、MATCH_RECOGNIZE、MAX、MEASURES、MEMBER、MERGE、METHOD、MIN、MINUS、MINUTE、MOD、MODIFIES、MODULE、MONDAY、MONTH、MULTILINESTRING、MULTIPOINT、MULTIPOLYGON、MULTISET |
N | NATIONAL、NATURAL、NCHAR、NCLOB、NEW、NEXT、NO、NONE、NORMALIZE、NOT、NTH_VALUE、NTILE、NULL、NULLIF、NUMERIC |
O | OCCURRENCES_REGEX、OCTET_LENGTH、OF、OFFSET、OLD、OMIT、ON、ONE、ONLY、OPEN、OR、ORDER、ORDINAL、OUT、OUTER、OVER、OVERLAPS、OVERLAY |
P | PARAMETER、PARTITION、PATTERN、PER、PERCENT、PERCENT_RANK、PERIOD、PERMUTE、PORTION、POSITION、POSITION_REGEX、POINT、POLYGON、POWER、PRECEDES、PRECISION、PREPARE、PREV、PRIMARY、PROCEDURE |
Q | QUALIFY |
R | RANGE、RANK、READS、REAL、RECURSIVE、REF、REFERENCES、REFERENCING、REGR_AVGX、REGR_AVGY、REGR_COUNT、REGR_INTERCEPT、REGR_R2、REGR_SLOPE、REGR_SXX、REGR_SXY、REGR_SYY、RELEASE、RESET、RESULT、RETURN、RETURNS、REVOKE、RIGHT、ROLLBACK、ROLLUP、ROW、ROWS、ROW_NUMBER、RUNNING |
S | SAFE_CAST、SAFE_OFFSET、SAFE_ORDINAL、SATURDAY、SAVEPOINT、SCOPE、SCROLL、SEARCH、SECOND、SEEK、SELECT、SENSITIVE、SESSION_USER、SET、SHOW、SIMILAR、SKIP、SMALLINT、SOME、SPECIFIC、SPECIFICTYPE、SQL、SQLEXCEPTION、SQLSTATE、SQLWARNING、SQRT、START、STATIC、STDDEV_POP、STDDEV_SAMP、STREAM、SUBMULTISET、SUBSET、SUBSTRING、SUBSTRING_REGEX、SUCCEEDS、SUM、SUNDAY、SYMMETRIC、SYSTEM、SYSTEM_TIME、SYSTEM_USER |
T | TABLE、TABLESAMPLE、THEN、THURSDAY、TIME、TIMESTAMP、TIMEZONE_HOUR、TIMEZONE_MINUTE、TINYINT、TO、 TRAILING、TRANSLATE、TRANSLATE_REGEX、TRANSLATION、TREAT、TRIGGER、TRIM、TRIM_ARRAY、TRUE、TRUNCATE、TRY_CAST、TUESDAY |
U | UESCAPE、UNION、UNIQUE、UNKNOWN、UNNEST、UPDATE、UPPER、UPSERT、USER、USING |
V | VALUE、VALUES、VALUE_OF、VARBINARY、VARCHAR、VARYING、VAR_POP、VAR_SAMP、VERSIONING、WEDNESDAY |
W | WHEN、WHENEVER、WHERE、WIDTH_BUCKET、WINDOW、WITH、WITHIN、WITHOUT |
Y | YEAR |
Lindorm非保留关键字
Lindorm SQL中的非保留关键字列表如下:
首字母 | 非保留关键字 |
A | A、ABSENT、ABSOLUTE、ACTION、ADA、ADD、ADMIN、AFTER、AGGREGATORS、ALWAYS、APPLY、ARRAY_AGG、ARRAY_CONCAT_AGG、ASC、ASSERTION、ASSIGNMENT、ATTR、ATTRIBUTE、ATTRIBUTES、AUTO_INCREMENT |
B | BEFORE、BERNOULLI、BREADTH |
C | C、CASCADE、CATALOG、CATALOG_NAME、CENTURY、CHAIN、CHARACTERISTICS、CHARACTERS、CHARACTER_SET_CATALOG、CHARACTER_SET_NAME、CHARACTER_SET_SCHEMA、CLASS_ORIGIN、COBOL、COLLATION、COLLATION_CATALOG、COLLATION_NAME、COLLATION_SCHEMA、COLUMN_FAMILY、COLUMN_NAME、COLUMNS、COMMAND_FUNCTION、COMMAND_FUNCTION_CODE、COMMENT、COMMITTED、CONDITIONAL、COMPACT、CONDITION_NUMBER、CONNECTION、CONNECTION_NAME、CONSTRAINTS、CONSTRAINT_CATALOG、CONSTRAINT_NAME、CONSTRAINT_SCHEMA、CONSTRUCTOR、CONTINUE、CONTINUOUS、CURSOR_NAME |
D | DATA、DATABASE、DATETIME_DIFF、DATETIME_INTERVAL_CODE、DATETIME_INTERVAL_PRECISION、DATETIME_TRUNC、DATE_DIFF、DATE_TRUNC、DAYOFWEEK、DAYOFYEAR、DAYS、DECADE、DEFAULTS、DEFERRABLE、DEFERRED、DEFINED、 DEFINER、DEGREE、DEPTH、DERIVED、 DESC、DESCRIPTION、DESCRIPTOR、DIAGNOSTICS、DISPATCH、DOMAIN、DOT、DOW、DOY、DYNAMIC_FUNCTION、DYNAMIC_FUNCTION_CODE |
E | ENCODING、EPOCH、ERROR、EXCEPTION、EXCLUDE、EXCLUDING |
F | FINAL、FIRST、FOLLOWING、FORMAT、FORTRAN、FOUND、FRAC_SECOND |
G | G、GENERAL、GENERATED、GEOMETRY、GO、GOTO、GRANTED、GROUP_CONCAT |
H | HBOOLEAN、HDOUBLE、HIERARCHY、HINTEGER、HLONG、HOP、HOURS、HSHORT、HSTRING |
I | IGNORE、IF、ILIKE、IMMEDIATE、IMMEDIATELY、IMPLEMENTATION、INCLUDE、INCLUDING、 INCREMENT、INITIALLY、INPUT、INSTANCE、INSTANTIABLE、INVOKER、ISODOW、ISOLATION、ISOYEAR |
J | JAVA、JSON |
K | K、KEY、KEY_MEMBER、KEY_TYPE |
L | LABEL、LAST、LENGTH、LEVEL、LIBRARY、LOCATOR |
M | M、MAP、MATCHED、MAXVALUE、MESSAGE_LENGTH、MESSAGE_OCTET_LENGTH、MESSAGE_TEXT、MICROSECOND、MILLENNIUM、MILLISECOND、MINUTES、 MINVALUE、MONTHS、MORE、MUMPS |
N | NAME、NAMES、NAMESPACE、NANOSECOND、NESTING、NORMALIZED、NULLABLE、NULLS、NUMBER |
O | OBJECT、OCTETS、OPTION、OPTIONS、ORDERING、ORDINALITY、OTHERS、OUTPUT、OVERRIDING |
P | PAD、PARAMETER_MODE、PARAMETER_NAME、PARAMETER_ORDINAL_POSITION、PARAMETER_SPECIFIC_CATALOG、PARAMETER_SPECIFIC_NAME、PARAMETER_SPECIFIC_SCHEMA、PARTIAL、PARTITIONS、PASCAL、PASSING、PASSTHROUGH、PASSWORD、PAST、PATH、PERCENTILE_CONT、PERCENTILE_DISC、PIVOT、PLACING、PLAN、PLI、PRECEDING、PREDOWNSAMPLE、PREDOWNSAMPLES、PRESERVE、PRIOR、PRIVILEGES、PUBLIC |
Q | QUARTER、QUARTERS、QUERY、QUERIES |
R | READ、RELATIVE、REPEATABLE、REPLACE、RESPECT、RESTART、RESTRICT、RETURNED_CARDINALITY、RETURNED_LENGTH、RETURNED_OCTET_LENGTH、RETURNED_SQLSTATE、RETURNING、RLIKE、ROLE、ROUTINE、ROUTINE_CATALOG、ROUTINE_NAME、ROUTINE_SCHEMA、ROW、ROW_COUNT |
S | SCALAR、SCALE、SCHEMA、SCHEMA_NAME、SCOPE_CATALOGS、SCOPE_NAME、SCOPE_SCHEMA、SEARCH、SECONDS、SECTION、SECURITY、SELF、SEPARATOR、SEQUENCE、SERIALIZABLE、SERVER、SERVER_NAME、SESSION、SETS、 SIMPLE、 SIZE、SOURCE、SPACE、SPECIFIC_NAME、SQL_BIGINT、SQL_BINARY、SQL_BIT、SQL_BLOB、SQL_BOOLEAN、SQL_CHAR、 SQL_CLOB、SQL_DATE、 SQL_DECIMAL、SQL_DOUBLE、SQL_FLOAT、SQL_INTEGER、SQL_INTERVAL_DAY、SQL_INTERVAL_DAY_TO_HOUR、SQL_INTERVAL_DAY_TO_MINUTE、SQL_INTERVAL_DAY_TO_SECOND、 SQL_INTERVAL_HOUR、SQL_INTERVAL_HOUR_TO_MINUTE、SQL_INTERVAL_HOUR_TO_SECOND、SQL_INTERVAL_MINUTE、SQL_INTERVAL_MINUTE_TO_SECOND、SQL_INTERVAL_MONTH、SQL_INTERVAL_SECOND、SQL_INTERVAL_YEAR、SQL_INTERVAL_YEAR_TO_MONTH、SQL_LONGVARBINARY、SQL_LONGVARCHAR、SQL_LONGVARNCHAR、SQL_NCHAR、SQL_NCLOB、SQL_NUMERIC、SQL_NVARCHAR、SQL_REAL、SQL_SMALLINT、SQL_TIME、SQL_TIMESTAMP、SQL_TINYINT、 SQL_TSI_DAY、SQL_TSI_FRAC_SECOND、SQL_TSI_HOUR、SQL_TSI_MICROSECOND、SQL_TSI_MINUTE、SQL_TSI_MONTH、 SQL_TSI_QUARTER、 SQL_TSI_SECOND、SQL_TSI_WEEK、SQL_TSI_YEAR、SQL_VARBINARY、SQL_VARCHAR、STATE、STATEMENT、STRING_AGG、STRUCTURE、STYLE、SUBCLASS_ORIGIN、SUBSTITUTE |
T | TABLES、TABLE_NAME、TAG、TEMPORARY、TIES、TIMESTAMPADD、TIMESTAMPDIFF、TIMESTAMP_DIFF、TIMESTAMP_TRUNC、TIME_DIFF、TIME_TRUNC、TOP_LEVEL_COUNT、TRANSACTION、TRANSACTIONS_ACTIVE、TRANSACTIONS_COMMITTED、TRANSACTIONS_ROLLED_BACK、TRANSFORM、TRANSFORMS、TRASH、 TRIGGER_CATALOG、TRIGGER_NAME、TRIGGER_SCHEMA、TTL、TUMBLE、TYPE |
U | UNBOUNDED、UNCOMMITTED、UNCONDITIONAL、UNDER、UNMAP、UNNAMED、UNPIVOT、USAGE、USE、USERS、USER_DEFINED_TYPE_CATALOG、USER_DEFINED_TYPE_CODE、USER_DEFINED_TYPE_NAME、USER_DEFINED_TYPE_SCHEMA、UTF16、UTF32、UTF8 |
V | VARIABLES、VERSION、VIEW、WEEK、WEEKS |
W | WILDCARD、WORK、WRAPPER、WRITE |
X | XML |
Y | YEARS |
Z | ZONE |