当前位置:首页 > SCHOOL > Oracle字典 > 正文内容

Oracle关联子查询

admin3年前 (2022-03-26)Oracle字典2790

在本教程中,您将学习Oracle关联子查询,这是一个子查询,其子句引用了外部查询中的列表达式。

Oracle关联子查询简介

请参阅中的以下产品(products)表:

以下使用子句中的从产品(products)表中返回最便宜的产品。

SELECT
    product_id,
    product_name,
    list_price
FROM
    products
WHERE
    list_price =(
        SELECT
            MIN( list_price )
        FROM
            products
    );

执行上面查询语句,得到以下结果 -

下面来更详细地解释这个查询语句。

首先,我们可以独立执行子查询。如 -

SELECT
    MIN( list_price )
FROM
    products;

其次,Oracle只评估(计算)一次子查询。
第三,子查询返回一个结果集后,外部查询使用它们。换句话说,外部查询取决于子查询。 但是,子查询是孤立的,不依赖于外部查询的值。

与上面的子查询不同,关联子查询是使用来自外部查询的值的。另外,对于由外部查询选择的每一行,关联子查询要评估计算一次。 因此,使用相关子查询的查询可能会很慢。

关联子查询也称为重复子查询或同步子查询。

Oracle关联子查询示例

我们来看一些关联子查询的例子,以更好地理解它们。

1. Oracle WHERE子句中的关联子查询示例

以下查询查找标价高于其平均标价的所有产品。

SELECT
    product_id, product_name, list_price
FROM
    products p
WHERE
    list_price > (
        SELECT
            AVG( list_price )
        FROM
            products
        WHERE
            category_id = p.category_id
    );

执行上面查询语句,得到以下结果 -

在上面的查询中,外部查询是:

SELECT
    product_id,
    product_name,
    list_price
FROM
    products p
WHERE
    list_price >

关联的子查询是:

SELECT
    AVG( list_price )
FROM
    products
WHERE
    category_id = p.category_id

对于products表中的每个产品,Oracle必须执行关联子查询以按类别计算平均标价。

2. Oracle在SELECT子句中关联子查询示例

以下查询返回基于产品类别的所有产品和标准成本:

SELECT
    product_id,
    product_name,
    standard_cost,
    ROUND(
        (
            SELECT
                AVG( standard_cost )
            FROM
                products
            WHERE
                category_id = p.category_id
        ),
        2
    ) avg_standard_cost
FROM
    products p
ORDER BY
    product_name;

执行上面查询语句,得到以下结果 -

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。