MySQL如何执行关联查询

任何一个关系型数据库都支持关联查询,MySQL中的关联查询中的“关联”的意义要比一般意义上理解的更广泛,MySQL认为任何一个查询都是一次“关联”,并不是一个查询要用到两个以上的表才叫“关联”。所以在MySQL中,每一个查询,每一个片段(包括子查询,甚至是基于单表的select)都可能是关联。

下面我们开一个例子:

查询学生表中计算机科学与技术系(CS)及年龄不大于19岁的学生

select * from student where sdept = 'CS' 

union 

select * from student where age<=19;

上面这个查询mysql会先将两个查询得到的结果放在一个临时表中,然后在从临时表中读取出数据,读取临时表也是一种关联。

MySQL执行关联的策略:

MySQL对任何关联执行的都是“嵌套循环关联”,就是先在一个表中循环取出单条数据,然后再嵌套到下一个表中寻找匹配的行,依次下去直到找到所有匹配的行为止。然后根据各个表匹配到的行,返回查询结果需要的列。MySQL会尝试在最后一个表中查找所有匹配的行,如果最后一个关联表中没有能够找到跟多的行以后,MySQL会返回到上一层的关联表中,看是否能够找到跟多的匹配的行,依次迭代。全外连接不能使用这种方式。


下面用一个图来展示这种策略:

查询语句:select col3 from table1,table2 where table1.col2 = table2.col2 and col1 in(2,3);



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值