子查询就是将查询结果当做表,对其进行查询操作,如:
Select column1,column2... from (select * from student) as t
a、内层表会有一个结果,外层查询对内层查询进行查询操作;
b、内层查询先执行,然后再对外层执行
c、可以对子查询命别名
1、标量子查询:
标量子查询就是返回单一结果的子查询,这样我们就可以对这种结果在where等字句中做条件运算了。
能够使用常数或者列名的地方,无论是 SELECT 子句、GROUP BY 子句、HAVING 子句,还是ORDER BY 子句,几乎所有的地方都可以使用。
标量子查询绝对不能返回多行结果
2、关联子查询:
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 product_type)
内层查询按product_type分组聚合求出平均自,然后结果和P1连接,平均值和P1.sale_price比较,每个P1.sale_price都有对应的平均值可以比较,它们按照product_type分组