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,其中存储可以通过其下订单的渠道,例如在线,代理商,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)