Oracle SQL Select - 根据语法图的有效选择列表

Posted

技术标签:

【中文标题】Oracle SQL Select - 根据语法图的有效选择列表【英文标题】:Oracle SQL Select - Valid select list according to syntax diagram 【发布时间】:2017-02-15 08:42:21 【问题描述】:

我在 Oracle 中成功运行了如下的 SELECT 语句:

SELECT a.*, b.* FROM table_a a, table_b b;

这里我给table table_a 赋予别名'a' 和table_b 别名'b'。 然后我使用选择列表中的两个表别名('a.*,b.*') 每个表别名都有一个星号,以从两者中选择所有列 表格。

当然,我可以使用 '*' 作为选择列表来获取所有列 来自两个表,但它是关于选择列表的有效内容 (比如这里的 'a.*, b.*')。

我可以执行上述语句,但是当我查看 Oracle 文档中选择列表的语法图时,似乎在选择列表中使用多个表别名是无效的。

问题是,是否可以使用选择列表的语法图导出类似 ('a.*, b.*') 的内容。在语法图中,似乎我可以在选择中只有一个表别名,因为我不能在图中“返回”来添加逗号和另一个表别名。

语法图:http://docs.oracle.com/database/121/SQLRF/img/select_list.gif

SELECT 的一般说明:http://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702

【问题讨论】:

顺便说一句,尽量避免old-style joins @JohnHC 通常我使用新的连接方式,谢谢。在这里我只是对有效的语法感到好奇。 【参考方案1】:

是的,你可以。如果你有更多的值,那么你只需要遍历回逗号,如下所示。

【讨论】:

似乎是图中的一个小疏忽/错误,可以通过将comma 路径交换到外部和内部的[t_alias].* 来澄清这种混淆。 我认为他们试图在语法图中的其他表达式中使用单个逗号。例如,相同的逗号用于其他表达式,例如 schema.table.*expr as c_alias 然而,语法 SELECT *, 1 FROM DUAL 无效但 SELECT d.*, 1 FROM DUAL d 有效 - 因此在语法图中交换这两个路径的位置将适用于第二个示例,但也意味着第一个应该是有效的语法(它不是)。 @MT0 好点 - 如果从别名路径返回逗号路径,则 SELECT *, 1 FROM DUAL 将是有效的。

以上是关于Oracle SQL Select - 根据语法图的有效选择列表的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中select /* */ from table语法

oracle sql 基础:select 语句

oracle 常用sql 经典sql函数使用 sql语法

在 Oracle Sql 中的 Select 语句中根据条件排除和包含列标题

ORACLE分页查询SQL语法——高效的分页

ORACLE分页查询SQL语法——最高效的分页