子查询

######################
#子查询 (嵌套select)
######################
-- 1.内层select首先执行 
-- 2.子查询最好都要用as取个别名 
SELECT product_type, cnt_product  FROM (
SELECT *  FROM (
SELECT product_type, COUNT(*) AS cnt_product    
FROM Product  GROUP BY product_type) AS ProductSum -- 第一个子查询的别名 
WHERE cnt_product = 4) AS ProductSum2; -- 第二个子查询的别名  

-- 3.标量子查询:一行一列,从而可以用=<>,可以在任何位置使用 
SELECT product_id, product_name, sale_price  
FROM Product WHERE sale_price > 
(SELECT AVG(sale_price)  FROM Product);-- 标量子查询 

#使用标量子查询的注意事项 
#一定不能返回多行结果 

-- 4.关联子查询 :加上where
-- 在细分的组内进行比较时,需要使用关联子查询。

#错误示范 
SELECT product_id, product_name, sale_price  
FROM Product
WHERE sale_price > (SELECT AVG(sale_price)  FROM Product   
                      GROUP BY product_type); -- 会出错,因为这个子查询返回多行
#正确示范 :关联子查询 
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);
#这样我们就能选取出办公用品、衣服和厨房用具三类商品中高于该类商品的平均销售单价的商品了
#这里有个一对一对应的关系 所以加上了where

#注意:关联子查询的组合条件一定要写在子查询里面
#错误书写 
SELECT product_type, product_name, sale_price  
FROM Product AS P1 
WHERE P1.product_type = P2.product_type  -- p2尽在子查询中有效     
and sale_price > (SELECT AVG(sale_price) FROM Product AS P2 
					GROUP BY product_type);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值