5.7mysql join_MySQL5.7——JOIN连接的使用及分析

本文详细介绍了MySQL5.7中的JOIN连接类型,包括INNER/CROSS JOIN、LEFT/RIGHT [OUTER] JOIN、NATURAL JOIN和STRAIGHT_JOIN。讲解了MySQL使用嵌套循环的方式实现表关联,并对比了ON和WHERE过滤条件的区别。强调了在外连接中,驱动表限制应用WHERE,被驱动表限制应用ON,而在内连接/交叉连接中,ON和WHERE效果相同。
摘要由CSDN通过智能技术生成

一、MySQL支持的连接类型

MySQL 5.7 官方文档中说明了支持如下四种连接类型:

[INNER|CROSS] JOIN

JOIN、CROSS JOIN 和 INNER JOIN 实现的功能是一致的,它们在语法上是等价的。

仅在语义上存在区别,CROSS JOIN 特指无条件的连接(没有指定 ON 条件的 JOIN 或者没有指定 WHERE 连接条件的多表 SELECT);INNER JOIN 特指有条件的连接(指定了 ON 条件的 JOIN 或者指定了 WHERE 连接条件的多表 SELECT)。

当然,如果你非要写 ... CROSS JOIN ... ON ... 这样的语法,也是可以执行的,虽然写着交叉连接,实际上执行的是内连接。

{LEFT|RIGHT} [OUTER] JOIN

外连接相对于内连接查询结果中多了左表中不满足条件的列。

例如使用LEFT OUTER JOIN时会保留左表(驱动表)的所有数据(不会受ON条件过滤影响),若右表(被驱动表)无满足连接条件的数据时,用NULL填充列。

NATURAL [{LEFT|RIGHT} [OUTER]] JOIN

自然连接是等值连接的一种特殊形式,自然连接会自动选取需要连接的两张表中字段名相同的所有列做相等比较,不需要再指定连接条件了。

STRAIGHT_JOIN

STRAIGHT_JOIN并不在 SQL 标准中,它在表现上和内连接或者交叉连接并无区别,只是一种给 MySQL 优化器的一个提示,STRAIGHT_JOIN 提示 MySQL 按照语句中表的顺序加载表,只有在你明确清楚 MySQL 服务器对你的 JOIN 语句做了负优化的时候才可能用到它。

Tips:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值