参考链接:mysql的left join和inner join的详细用法https://blog.csdn.net/weixin_45906830/article/details/111133181
1. inner join:内连接:显示两个表中有联系的所有数据。
通俗讲:inner join 查找的数据是左右两张表共有的。
2. left join:左链接:以左表为参照,显示所有数据,右表中没有则以null显示。
通俗讲:left 以 left join 左侧的表为主表。
3. right join:右链接:以右表为参照显示数据,,左表中没有则以null显示。
通俗讲:right 以 right join 右侧表为主表。
1. 准备如图两张表 order、customer
2. 内连接 inner join
SELECT * FROM `order` as o INNER JOIN customer as c on o.customerId = c.id;
SELECT * FROM customer as c INNER JOIN `order` as o on o.customerId = c.id;
3. 左连接 left join
SELECT * FROM `order` as o LEFT JOIN customer as c on o.customerId = c.id;
SELECT * FROM customer as c LEFT JOIN `order` as o on o.customerId = c.id;
4. 右连接 rignt join
SELECT * FROM `order` as o RIGHT JOIN customer as c on o.customerId = c.id;
SELECT * FROM customer as c RIGHT JOIN `order` as o on o.customerId = c.id;
5. 关键字 on
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用 left jion 时,on 和 where 条件的区别如下:
1. on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2. where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。因为on会生成一个中间表,然后用where会把不符合条件的给筛选出去。inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。