美文网首页
关联子查询

关联子查询

作者: susupp | 来源:发表于2018-07-23 16:09 被阅读0次

    关联子查询会在细分的组内进行比较时使用。
    关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
    关联子查询的结合条件如果未出现在子查询之中就会发生错误。

    按照商品种类和该种类的平均单价进行比较
    SELECT
        product_type,
        product_name,
        sale_price
    FROM
        product AS p1
    WHERE
        sale_price > (
            SELECT
                AVG(sale_price)
            FROM
                product AS p2
            WHERE
                p1.product_type = p2.product_type 
            /* 这里的GROUP BY也可以不要
            因为在WHERE字句中有了product_type相等的条件
            使得AVG函数按照商品种类进行了平均值计算
            */
            GROUP BY
                product_type
        );
    
    关联子查询也是用来对集合进行切分的

    其实关联子查询和GROUP BY一样,可以对结合进行切分。


    内部执行情况

    对于初学者,关联子查询可能比较难理解,但记住这种分组效应,就好理解很多。结合上图去看一下DBMS到底是怎么来执行关联子查询的。

    关联子查询和GROUP BY都可以进行分组,但在应用场景上,也有明显的不同。有GROUP BY的SELECT字句中,只能选择被GROUP BY的列,也就是分组列或者聚合函数操作的结果;但是关联子查询则相当于进行一次GROUP BY再JOIN回去一样的。在有关联子查询的query里,SELECT的列是不受限制的。这一点可以在练习题5.4中看的更清楚。关联子查询的分组,只是将分组查询出来的信息作为新列加上去,不对分组内容进行聚合。

    SELECT
        product_id,
        product_name,
        product_type,
        sale_Price,
        (
            SELECT
                avg(sale_price)
            FROM
                product AS p2
            WHERE
                p1.product_type = p2.product_type
        ) AS avg_sale_price
    FROM
        product AS p1;
    
    执行结果

    相关文章

      网友评论

          本文标题:关联子查询

          本文链接:https://www.haomeiwen.com/subject/odjjmftx.html