这个别名指的是哪一列?

Gui*_*taX 2 oracle join syntax

我已经阅读了几次以下代码,试图弄清楚它在做什么。

“右外连接是将右表中不匹配的行与左表中的匹配行一起返回。”

好的,但是"item_cnt"表中不存在该列,那么它作为别名使用的是哪一列?我正在为 1z0-047 做准备,所以任何帮助将不胜感激。


您执行了以下查询以显示PRODUCT_NAME产品的订购次数:

SELECT p.product_name, i.item_cnt
FROM (SELECT product_id, COUNT (*) item_cnt
FROM order_items
GROUP BY product_id) i RIGHT OUTER JOIN products p ON i.product_id = p.product_id;
Run Code Online (Sandbox Code Playgroud)

我认为该列应该存在。但这里是包含所有示例架构的 Oracle 文档页面。如果我用 ctrl+f for 搜索item_cnt,我什么也没找到:Oracle example schemas

ype*_*eᵀᴹ 6

好的,但是"item_cnt"表中不存在该列,那么它作为别名使用的是哪一列?

该列item_cnt可能不存在于基表中(我们相信你,我们没有去搜索链接的文档。)

但是这部分代码:

FROM 
     (SELECT product_id, COUNT (*) item_cnt
      FROM order_items
      GROUP BY product_id) i
Run Code Online (Sandbox Code Playgroud)

提供派生表。该列在查询运行期间存在于派生表中i。在(SELECT product_id, ... item_cnt ...) AS i定义了一个派生表,它的名字就i和这个派生表有两列,product_id并且item_cnt(和item_cnt是表达一个别名COUNT(*),没有COUNT(*)列无论是在任何表中!)

因此,稍后在代码中,您可以使用它们。将i.product_id在使用ON条件和i.item_cntSELECT列表。

(而且它似乎出现得更早而不是更晚,这有点令人困惑。那是因为SELECT查询的一部分在逻辑上是在该FROM部分之后执行的。)

FROM (...) i RIGHT OUTER JOIN products p ON ... 
Run Code Online (Sandbox Code Playgroud)

对于查询执行,两个表(别名ip)没有区别。一个是基表,另一个是派生表并不重要。它们可以以相同的方式使用。(据我们所知,products也可能不是基表。它很可能是查看表,通常称为视图。)