MySQL 内连接、左连接(左外连接)、右连接(右外连接)

join

创建示例表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE `a_table` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `b_table` (
  `b_id` int(11) DEFAULT NULL,
  `b_name` varchar(10) DEFAULT NULL,
  `b_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

内连接

组合两个表中的记录,返回两个表关联字段相交集的记录

关键字:INNER JOIN ON

1
SELECT * FROM a_table a INNER JOIN b_table b ON a.a_id = b.b_id;

左连接(左外连接)

LEFT JOINLEFT OUTER JOIN的简写,全称是左外连接,是外连接中的一种。 左(外)连接,以左表为主,返回左表全部,右表返回符合条件的记录。右表记录不存在时显示NULL。

关键字:LEFT JOIN ON / LEFT OUTER JOIN ON

1
SELECT * FROM a_table a LEFT JOIN b_table b ON a.a_id = b.b_id;

右连接(右外连接)

RIGHT JOINRIGHT OUTER JOIN的简写,全称是右外连接,是外连接中的一种。 右(外)连接,以右表为主,返回右表全部,左表返回符合条件的记录。左表记录不存在时显示NULL。

关键字:RIGHT JOIN ON / RIGHT OUTER JOIN ON

1
SELECT * FROM a_table a RIGHT OUTER JOIN b_table b ON a.a_id = b.b_id;

指定驱动表

使用 straight_join 可以固定连接方式,让前面的表为驱动表。

1
SELECT * FROM a_table a STRAIGHT_JOIN b_table b ON a.a_id = b.b_id;

建议小表驱动大表,如果是普通的join语句,一般不需要去处理,优化器默认也会选择小表做为驱动表。

FULL OUTER JOIN(全连接)

FULL OUTER JOIN(全连接)的结果其实就是LEFT JOIN 结果与RIGHT JOIN结果的并集。

需要注意的是MySQL数据库不支持FULL OUTER JOIN

参考