基于BigQuery语法的SELECT子句起止范围界定问题
关于SQL中SELECT子句定义的严谨区分
这是个值得严谨区分的问题,我们以BigQuery的标准SQL语法为例:
query_statement: query_expr query_expr: [ WITH [ RECURSIVE ] { non_recursive_cte | recursive_cte }[, ...] ] { select | ( query_expr ) | set_operation } [ ORDER BY expression [{ ASC | DESC }] [, ...] ] [ LIMIT count [ OFFSET skip_rows ] ] select: SELECT [ { ALL | DISTINCT } ] [ AS { STRUCT | VALUE } ] select_list [ FROM from_clause[, ...] ] [ WHERE bool_expression ] [ GROUP BY { expression [, ...] | ROLLUP ( expression [, ...] ) } ] [ HAVING bool_expression ] [ QUALIFY bool_expression ] [ WINDOW window_clause ]
比如,我们很容易看出WHERE子句对应的语法结构是:
[ WHERE bool_expression ]
但SELECT子句的定义到底是什么?是包含所有相关内容的整体结构,还是仅从SELECT关键字到FROM子句之前的部分?我们可以通过三种标记来明确区分不同范围的定义:
[:代表完整查询结构{:代表从SELECT到集合操作前的部分<:代表从SELECT到FROM之前的部分
拿下面这条SQL语句举例:
SELECT 1 FROM x UNION ALL SELECT 2
用上述标记区分后,结构如下:
[ {<SELECT 1> FROM x} UNION ALL {<SELECT 2>} ]
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

