詞法結(jié)構(gòu)
本文介紹Lindorm SQL的基本詞法結(jié)構(gòu)。
背景信息
一條SQL語(yǔ)句通常是由一個(gè)記號(hào)(Token)的序列構(gòu)成,并以半角分號(hào)(;)結(jié)尾。這個(gè)記號(hào)可以是一個(gè)關(guān)鍵詞、一個(gè)標(biāo)識(shí)符、一個(gè)常量或一個(gè)特殊字符符號(hào)。兩個(gè)記號(hào)間通常以空格、制表符或新的一行來(lái)分隔。
標(biāo)識(shí)符
標(biāo)識(shí)符在SQL語(yǔ)句中用于表示數(shù)據(jù)庫(kù)、表、列或其他數(shù)據(jù)對(duì)象。Lindorm SQL的標(biāo)識(shí)符使用反引號(hào)(`
)作為引用符。
未加引號(hào)的標(biāo)識(shí)符,必須以字母開(kāi)頭,只能包含字母、數(shù)字和下劃線(xiàn)(
_
)。加引號(hào)的標(biāo)識(shí)符,例如
`Employee Name`
,以反引號(hào)開(kāi)頭和結(jié)尾。它們可以包含幾乎任何字符,包括空格和其他標(biāo)點(diǎn)符號(hào)。
此外,在Lindorm SQL語(yǔ)法中,不同層級(jí)的兩個(gè)數(shù)據(jù)對(duì)象間通常使用半角句號(hào)(.
)進(jìn)行分隔。 例如,想要顯式指定數(shù)據(jù)庫(kù)db中的表tbl時(shí),可以用db.tbl
來(lái)指定。
常量
在Lindorm SQL中有兩種隱式類(lèi)型常量:字符串常量和數(shù)字常量。
字符串常量
?字符串常量是指由半角單引號(hào)(
'
)包圍的任意字符序列,例如'This is a string'
。數(shù)字常量
Lindorm SQL支持以下形式的數(shù)字常量:
形式
說(shuō)明
digits
digits表示一個(gè)或多個(gè)十進(jìn)制數(shù)字(0~9)。
digitse[+-]digits
包含指數(shù)標(biāo)記(e)的數(shù)字常量。例如4e3。
digits.[digits][e[+-]digits]
包含小數(shù)點(diǎn)(
.
)和指數(shù)標(biāo)記(e)的數(shù)字常量。例如5.3e2。[digits].digits[e[+-]digits]
重要數(shù)字常量中不允許嵌入任何空格或除上述形式以外的字符。
如果數(shù)字常量中包含小數(shù)點(diǎn)(
.
),則小數(shù)點(diǎn)的前后都至少需要存在一個(gè)十進(jìn)制數(shù)字。如果數(shù)字常量中包含指數(shù)標(biāo)記(e),則指數(shù)標(biāo)記的后面至少需要存在一個(gè)十進(jìn)制數(shù)字。
特殊字符
一些不是字母或數(shù)字的字符在不同的使用環(huán)境下可能存在特殊的含義。
半角圓括號(hào)(
()
):用于將表達(dá)式進(jìn)行分組,并強(qiáng)制優(yōu)先。在某些特殊情況下,半角圓括號(hào)可能會(huì)被要求作為特定SQL語(yǔ)法的一部分。半角逗號(hào)(
,
):在某些語(yǔ)法結(jié)構(gòu)中,用于分隔列表元素。半角分號(hào)(
;
):結(jié)束一個(gè)SQL命令。僅允許出現(xiàn)在SQL命令句尾或字符串常量中。半角冒號(hào)(
:
):冒號(hào)允許出現(xiàn)在標(biāo)識(shí)符中,用于分隔列族名和列名。星號(hào)(
*
):用于在上下文中標(biāo)記一個(gè)表的所有域或組合值。半角句號(hào)(
.
):多用于數(shù)字常量中,表示小數(shù)。也可以用于標(biāo)識(shí)符中,分隔不同層級(jí)的數(shù)據(jù)對(duì)象。
關(guān)鍵字
SQL關(guān)鍵字分為保留關(guān)鍵字和非保留關(guān)鍵字。根據(jù)SQL標(biāo)準(zhǔn)規(guī)定,保留關(guān)鍵字是真正的關(guān)鍵字,僅在被引用符引用時(shí)才可以被用作標(biāo)識(shí)符。非保留關(guān)鍵字只在特殊的環(huán)境中有特殊語(yǔ)義,因此可以在非語(yǔ)義環(huán)境中被用作標(biāo)識(shí)符。
由于文檔的更新可能存在延遲。從寬表引擎2.6.3開(kāi)始,建議直接通過(guò)查詢(xún) INFORMATION_SCHEMA.KEYWORDS
系統(tǒng)視圖搜索SQL引擎支持的保留關(guān)鍵字和非保留關(guān)鍵字。
Lindorm保留關(guān)鍵字
Lindorm SQL中的保留關(guān)鍵字列表如下:
首字母 | 保留關(guān)鍵字 |
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非保留關(guān)鍵字
Lindorm SQL中的非保留關(guān)鍵字列表如下:
首字母 | 非保留關(guān)鍵字 |
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 |