From a7fa2f659408235cc5e0970d0240579607d41636 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 9 May 2024 12:28:08 +0800 Subject: [PATCH] ebnf select (#17287) --- sql-statements/sql-statement-select.md | 84 ++++++++------------------ 1 file changed, 24 insertions(+), 60 deletions(-) diff --git a/sql-statements/sql-statement-select.md b/sql-statements/sql-statement-select.md index 431c50320720..1b3be6aa4218 100644 --- a/sql-statements/sql-statement-select.md +++ b/sql-statements/sql-statement-select.md @@ -10,84 +10,48 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-select/','/docs-cn/dev/refe ## 语法图 -**SelectStmt:** - -![SelectStmt](/media/sqlgram/SelectStmt.png) - -**FromDual:** - -![FromDual](/media/sqlgram/FromDual.png) - -**WhereClauseOptional:** - -![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png) - -**SelectStmtOpts:** +```ebnf+diagram +SelectStmt ::= + ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) + OrderBy? SelectStmtLimit? SelectLockOpt? SelectStmtIntoOption -![SelectStmtOpts](/media/sqlgram/SelectStmtOpts.png) +SelectStmtBasic ::= + "SELECT" SelectStmtOpts Field ("," Field)* ( "HAVING" Expression)? -**SelectStmtFieldList:** +SelectStmtFromDualTable ::= + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" "DUAL" WhereClause? -![SelectStmtFieldList](/media/sqlgram/SelectStmtFieldList.png) +SelectStmtFromTable ::= + "SELECT" SelectStmtOpts Field ("," Field)* "FROM" TableRefsClause + WhereClause? GroupByClause? ( "HAVING" Expression)? WindowClause? -**TableRefsClause:** +SelectStmtOpts ::= + TableOptimizerHints DefaultFalseDistictOpt PriorityOpt SelectStmtSQLSmallResult + SelectStmtSQLBigResult SelectStmtSQLBufferResult SelectStmtSQLCache SelectStmtCalcFoundRows + SelectStmtStraightJoin -```ebnf+diagram TableRefsClause ::= TableRef AsOfClause? ( ',' TableRef AsOfClause? )* AsOfClause ::= 'AS' 'OF' 'TIMESTAMP' Expression -``` - -**SelectStmtGroup:** - -![SelectStmtGroup](/media/sqlgram/SelectStmtGroup.png) - -**HavingClause:** - -![HavingClause](/media/sqlgram/HavingClause.png) - -**OrderByOptional:** -![OrderByOptional](/media/sqlgram/OrderByOptional.png) +SelectStmtLimit ::= + ("LIMIT" LimitOption ( ("," | "OFFSET") LimitOption )? +| "FETCH" ("FIRST" | "NEXT") LimitOption? ("ROW" | "ROWS") "ONLY" ) -**SelectStmtLimit:** - -![SelectStmtLimit](/media/sqlgram/SelectStmtLimit.png) - -**FirstOrNext:** - -![FirstOrNext](/media/sqlgram/FirstOrNext.png) - -**FetchFirstOpt:** - -![FetchFirstOpt](/media/sqlgram/FetchFirstOpt.png) - -**RowOrRows:** - -![RowOrRows](/media/sqlgram/RowOrRows.png) - -**SelectLockOpt:** - -```ebnf+diagram -SelectLockOpt ::= - ( ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? ) -| ( 'LOCK' 'IN' 'SHARE' 'MODE' ) )? +SelectLockOpt ::= + ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? +| 'LOCK' 'IN' 'SHARE' 'MODE' ) TableList ::= TableName ( ',' TableName )* -``` -**WindowClauseOptional** +WindowClause ::= + "WINDOW" WindowDefinition ("," WindowDefinition)* -![WindowClauseOptional](/media/sqlgram/WindowClauseOptional.png) - -**TableSampleOpt** - -```ebnf+diagram TableSampleOpt ::= - 'TABLESAMPLE' 'REGIONS()' + 'TABLESAMPLE' 'REGIONS' '(' ')' ``` ## 语法元素说明