相关子查询PK非相关子查询

相关子查询PK非相关子查询:

1.非相关子查询:

例子:查询发票数大于2的客户的信息

select * 
from client c
where client_id in(
	seletc client_id,count(*)
	from invoices
	group by client_id
	having count(*) > 2
	)

执行流程:
1、 先执行括号里的子查询语句
2、 得到子查询的返回结果
3、 将子查询返回的结果作为外部查询的条件
4、 执行外部查询语句
5、 得到最终结果


相关子查询:

例子:查询出金额大于平均值(每个客户的发票金额平均值)的发票信息

select * 
from invoices i
where i.total > (
	seletc avg(total) 
	from invoice 
	where i.client_id = client_id
	)

执行流程:
1、 从外层查询的表中获取相关的字段
2、 将从外层获取到的值供内层作为条件进行查询
3、 外层再根据内层返回的结果进行查询
4、 得到最终结果


# 总结:相关子查询执行效率慢,数据越多,查询更费力,耗费存储也更多。非相关子查询内层只执行一次,效率更高。 (即使这样,相关子查询应用也较多,注意掌握)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值