Oracle
此別名指的是哪一列?
我已經閱讀了以下程式碼幾次,試圖弄清楚它在做什麼。
“右外連接是將右表中不匹配的行與左表中的匹配行返回。”
好的,但是
"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;
我認為該列應該存在。但這裡是包含所有範例模式的 Oracle 文件頁面。如果我用 ctrl+f 搜尋
item_cnt
,我什麼也找不到:Oracle example schemas。
好的,但是
"item_cnt"
表中不存在該列,那麼它作為別名的列是什麼?該列
item_cnt
可能不存在於基表中(我們相信你,我們沒有去搜尋連結的文件。)但是這部分程式碼:
FROM (SELECT product_id, COUNT (*) item_cnt FROM order_items GROUP BY product_id) i
提供了一個派生表。該列在查詢執行期間存在於派生表中
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 ...
對於查詢執行,兩個表(aliased
i
和p
)沒有區別。一個是基表而另一個是派生表並不重要。它們可以以相同的方式使用。(據我們所知,它products
也可能不是基表。它很可能是一個查看的表,通常稱為視圖。)