一、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: