MySQL的连接查询包括内连接(inner join)、外连接(left/right join,下文一律以left join代替)、交叉连接(在MySQL中等价于内连接,但是在标准SQL中是不等价的)、全连接(MySQL不支持full join,但是可以通过union构造),本文主要讲解一般我们在写SQL中最常用的:内连接以及外连接两种连接查询,通过一些案例来说明我们在使用关联查询中需要注意什么问题,要怎么做才能做到最优查询。
重点说在前面
- MySQL对表连接至今只支持nested loop join,而不支持hash
join,这个是MySQL不建议执行复杂关联查询的根源(MariaDB已经实现hash join)
通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。
…