SQL---关联子查询(correlated subquery)

关联子查询和普通子查询的区别在于:1,关联子查询引用了外部查询的列。

                                                             2,执行顺序不同。对于普通子查询,先执行普通子查询,再执行外层查询;而对于关联子查询,先执行外层查询,然后对所有通过过滤条件的记录执行内层查询。

 

语法:

SELECT column1, column2
FROM table1 AS outer
WHERE column1 operator
      (SELECT column1, column2
       FROM table2
       WHERE expr1 = outer.expr2);

 

在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,在关联子查询中是信息流是双向的,外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录。然后,外部查询根据返回的记录做出决策。

 

关联子查询的用途:

1,在细分的组内进行比较

例子:查询各个商品种类中高于该商品种类平均销售价格的商品信息

SELECT * 
FROM t_commodity AS t1
WHERE sell_unit_price > (
       SELECT AVG(sell_unit_price) 
       FROM t_commodity
       WHERE category = t1.category
)

 

2,和EXISTS或NOT EXISTS配合使用,查询存在或不存在的记录

例子:查询没有下过订单的所有顾客的信息

SELECT customer_id
FROM customers AS c
WHERE NOT EXISTS (
      SELECT customer_id
      FROM orders
      WHERE customer_id = c.customer_id
)

 

posted @ 2020-03-23 11:08  HuZihu  阅读(4306)  评论(0编辑  收藏  举报