DB2 中 CORRELATED 和 UNCORRELATED 子查詢之間的區別


子查詢是一個巢狀查詢。當該子查詢只執行一次,而且該子查詢的結果用於提取主查詢中的資料時,則此類子查詢被稱為 UNCORRELATED 子查詢。相反,如果一個子查詢在每次執行時都引用主查詢,那麼該子查詢被稱為 CORRELATED 子查詢。

例如,如果我們要從 ORDERS 表中提取 ORDER_TOTAL 大於總體平均值的全部訂單,那麼我們可以使用以下 UNCORRELATED 子查詢。

例子

SELECT ORDER_ID FROM ORDERS WHERE ORDER_TOTAL > (SELECT AVG(ORDER_TOTAL) FROM ORDERS)

有一個 DB2 表 ORDER_CHANNEL,它儲存了可以下達訂單的渠道,例如 ONLINE、AGENT、AFFILIATE 等。

如果我們要為每個渠道提取金額最大的訂單,那麼我們將使用以下 CORRELATED 子查詢。

例子

SELECT ORDER_ID, ORDER_CHANNEL, ORDER_TOTAL
   FROM ORDERS T1
WHERE ORDER_TOTAL IN (SELECT MAX (T2.ORDER_TOTAL)
   FROM ORDERS T2 WHERE
   T1.ORDER_CHANNEL_ID = T2.CHANNEL_ID
   GROUP BY T2.CHANNEL_ID)

更新於:30-11-2020

3K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始使用
廣告
© . All rights reserved.