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)

