本文介紹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 |