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.