sql子查询和相关子查询

表的结构如下:


 
 
  1. mysql> select * from product;
  2. + ----+------+-------+-----+
  3. | id | name | price | num |
  4. + ----+------+-------+-----+
  5. | 1 | 伊利 | 68 | 1 |
  6. | 2 | 蒙牛 | 88 | 1 |
  7. | 3 | nike | 888 | 2 |
  8. | 4 | 阿迪 | 688 | 2 |
  9. | 5 | kris | 1888 | 3 |
  10. | 6 | tom | 2888 | 3 |
  11. | 7 | sam | 1688 | 3 |
  12. + ----+------+-------+-----+

嵌套子查询:执行不依赖于外部的查询。

执行顺序:先子查询然后在是主查询。

子查询的结果不会被显示,会将其传递给外部查,作为外部查询的条件来输出

例子:查询所有价格高于平均价格的商品信息。


 
 
  1. mysql> select * from product where price > ( select avg(price) from product);
  2. + ----+------+-------+-----+
  3. | id | name | price | num |
  4. + ----+------+-------+-----+
  5. | 5 | kris | 1888 | 3 |
  6. | 6 | tom | 2888 | 3 |
  7. | 7 | sam | 1688 | 3 |
  8. + ----+------+-------+-----+

先执行子查询得到product表中商品的平均价格 然后通过price>avg的条件控制输出主查询的结果。

相关子查询:执行依赖于外部查询。

执行顺序:先是主查询然后在是子查询。

执行过程:

  1. 从主查询中取出一个元组(表中的行),将元组相关的列的值传递给子查询
  2. 子查询将列的值作为条件得到结果
  3. 主查询根据子查询得到的结果或者结果集得到满足条件的行,selece控制显示
  4. 然后主查询取出下一个元组继续1-3步骤,直到所有元组全部处理完毕。

例:取出不同num中的最高价格的商品信息


 
 
  1. mysql> select * from product p where p.price = ( select max(price) from product where num=p.num);
  2. + ----+------+-------+-----+
  3. | id | name | price | num |
  4. + ----+------+-------+-----+
  5. | 2 | 蒙牛 | 88 | 1 |
  6. | 3 | nike | 888 | 2 |
  7. | 6 | tom | 2888 | 3 |
  8. + ----+------+-------+-----+
  9. 执行过程:
  10. 1.取出这个元组:| 1 | 伊利 | 68 | 1 | (传递“num=1”到子查询中)
  11. 2.select max(price) from product where num=1;
  12. 3.select * from produt p where p.price=88;
  13. 4.得到商品信息:| 2 | 蒙牛 | 88 | 1 |
  14. 5.依次取出接下来的元组然后执行1-4.
                                </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值