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。
好的,但是
"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_cnt
中SELECT
列表。
(而且它似乎出现得更早而不是更晚,这有点令人困惑。那是因为SELECT
查询的一部分在逻辑上是在该FROM
部分之后执行的。)
FROM (...) i RIGHT OUTER JOIN products p ON ...
Run Code Online (Sandbox Code Playgroud)
对于查询执行,两个表(别名i
和p
)没有区别。一个是基表,另一个是派生表并不重要。它们可以以相同的方式使用。(据我们所知,products
也可能不是基表。它很可能是查看表,通常称为视图。)
归档时间: |
|
查看次数: |
169 次 |
最近记录: |