1、子查询和视图
视图并不是用来保存数据的,而是通过保存读取数据的SELECT语句的方法来为用户提供便利。反之,子查询就是讲用来定义视图的SELECT语句直接用于FROM子句当中。简单点说,子查询就是一张一次性视图。
SELECT product_type,cnt_product
FROM (SELECT product_type,COUNT(*) AS cnt_product
FROM product
GROUP BY product_type ) AS ProductSum;--虽然ProductSum就是子查询的名称,但由于该名称是一次性的,
--因此不会像视图那样保存在存储介质(硬盘)之中,而是在SELECT语句执行之后就消失了。
注意:
1、子查询就是讲用来定义视图的SELECT语句直接用于FROM子句当中。
2、尽量避免使用多层嵌套的子查询
3、子查询必须设定名称
2、标量子查询
标量子查询则有一个特殊的限制,那就是必须而且只能返回一行一列的结果
SELECT product_id,product_name,sale_price
FROM product
WHERE sale_price>(SELECT AVG(sale_price)
FROM product);
3、标量子查询的书写位置
标量子查询的书写位置并不仅仅局限于WHERE子句中,通常任何可以使用单一值得位置都可以使用。也就是说,能够使用常数或者列名的地方,无论是SELECT子句,GROUP BY子句,HAVING子句,还是ORDER BY子句,几乎所有的地方都可以使用。
注意:
1、标量子查询绝对不能返回多行结果。也就是说,如果子查询返回了多行结果,那么他就不再是标量子查询,而是一个普通的子查询了。