DB2 中 CORRELATED 子查询和非 CORRELATED 子查询的区别

db2databasebig data analytics更新于 2026/2/8 0:22:17

子查询是一种嵌套查询。如果子查询只执行一次,并且其结果用于提取主查询中的数据,则这种类型的子查询称为非 CORRELATED 子查询。另一方面,如果子查询每次执行都引用主查询,则该子查询称为 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)

相关文章