前面我们学过标量子查询,返回值只能是一行结果,在面对需要返回多行结果时会束手无策,解决办法就是使用关联子查询。
01关联子查询
所谓关联子查询,就是在有效范围内进行的子查询。
注意这里的有效范围含义:超过这个范围将使查询无效
关联子查询可以理解为一个桥梁,连接两个或者n个标量子查询。
格式:表名.列名
例一:
SELECT product_id,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 product_type)
例二
SELECT product_id,product_name,sale_price
FROM PRODUCT AS P1
WHERE P1.product_type=P2.product_type
AND sale_price>(SELECT AVG(sale_price)
FROM PRODUCT AS P2
GROUP BY product_type)
注意:
这是一种典型错误,结合条件一定要写到子查询语句中,否则无法取得沟通作用。
因为关联名是有使用范围的:子查询内部设定的关联名,只能在子查询内部使用。说白了就是内部可以看到外部,外部看不到内部。
本例中p2仅在内部有效,p1仅在外部有效。
sql语言会按照先内部再外部的顺序执行,如果是在外部调用内部函数p2只会得到一个无效的表
使用关联子查询也是对集合进行切分的。