SQL 查询中空格是可选的吗?

Ben*_*oit 7 sql language-design

我注意到使用 Oracle 或 SQLite,这样的查询是完全有效的

\n\n
SELECT*FROM(SELECT a,MAX(b)i FROM c GROUP BY\xc2\xa0a)WHERE(a=1)OR(i=2);\n
Run Code Online (Sandbox Code Playgroud)\n\n

SQL 的 \xe2\x80\x9cfeature\xe2\x80\x9d 是否不需要用空格包围查询的关键字或单词?如果是这样,为什么要这样设计?SQL 被设计为可读的,这似乎是一种混淆形式(尤其MAX(b)ii是用作别名的令牌)

\n

Ric*_*iwi 7

SQL-92 BNF Grammar 此处明确指出分隔符(括号、空格、* 等)对于分解标记是有效的,这使得white space在其他分隔符已经分解标记的各种情况下可选。

这不仅适用于 SQLite 和 Oracle,至少适用于 MySQL 和 SQL Server(我使用并测试过),因为它是在语言定义中指定的。